2013-04-08 7 views
0

문서의 첫 줄에 패턴을 일치시켜야합니다. 필드 구분 기호는 ":"이며 패턴을 따르지 않을 때 잘못된 메시지를 가져 오려고합니다. 공백이 있거나없는 필드를 구별해야합니다. 나는 이런 식으로 뭔가를 사용하십시오공백없이 일치하는 awk 패턴

$1 

"AAABBBF43T5Y" 

하고

"AABBBF 43T5Y" 

경우에도 내가 얻을 필요가있는 경우

awk -F ":" '{if (($1 ~/^@[A-Za-z0-9]*/) && ($2 ~/[0-9]*/) && ($3 ~/[0-9]*/) && ($4 ~/[0-9]*/) && ($5 ~/[0-9]+/)){print "ok"} else { print "no"}}' 

내가 "OK"수 $ 1 또는 다른 fi에 공간이있을 때 "아니오" 노년.

제안 사항?

OK, 약간 혼란 스럽습니다.

나는 이런 일이 :

@HWUSI-EAS100R:6:73:941:1973#0/1 

을 그리고 각 필드를 확인합니다. 첫 번째 문자는 임의의 문자, 두 번째 숫자 만 포함 할 수 있습니다. 하지만 공백은 허용되지 않으므로 다음과 같이 올바르지 않습니다.

@HWUSI-E AS100R:6:73:9 41:1973#0/1 

의견에 진심으로 감사드립니다.

+0

입력 파일에서 두 줄의 예제를 표시 할 수 있습니다. 하나는 "ok", 하나는 "NOK"줄입니까? 아마도 더 쉬운 해결책 일 것입니다. – Kent

+0

당신은 모든 정규 표현식을'^'와'$'로 고정시킬 필요가 있습니다. 제 대답을보십시오. –

답변

2

귀하의 예와 말씨는 매우 혼란 스럽지만 첫 번째 필드에 공백이 포함되어 있는지 확인하려는 것 같습니다. 방금 조건을 출력 인쇄를 확인하려는 경우 당신이 무엇을 원하는 경우 이전 블록의 구조를 쉽게 변경 가능, 간단하게 쓸 수

$ cat file 
AABBBF43T5Y:f2:f3 
AABBBF 43T5Y:f2:f3 

$ awk -F: '$1~/ /{print "FAIL LINE: ",NR;next}{print "PASS LINE:",NR}' file 
PASS LINE: 1 
FAIL LINE: 2 

이 :

$ awk -F: '{print $1~/ /?"FAIL":"PASS","LINE:",NR}' file 
PASS LINE: 1 
FAIL LINE: 2 
당신이 뭔가를 할 수

문제를 명확하게 설명하고 대표적인 입력 파일과 예상 출력을 게시하면 더 나은 답변을 얻을 수 있습니다.

편집 :

만큼 정규식 일치 ^$에 고정 될 때 만 다음에 공백이 accpeted되지 않습니다 허용되는 문자가 들어 있습니다 만 그것을 그래서

$ cat file 
@HWUSI-EAS100R:6:73:941:1973#0/1 
@HWUSI-E AS100R:6:73:9 41:1973#0/1 

$ awk -F: '$1~/^@[a-zA-Z0-9-]*$/&&$2~/^[0-9]*$/{print "PASS",NR;next}{print "FAIL",NR}' file 
PASS 1 
FAIL 2 

$2~/^[0-9]*$/하는 것은 평가 진실 정규식은 일치하고 정규식은 다음과 같습니다.

^  # Match start of field 
[0-9]* # Zero or more digits 
$  # The end of the field 

빈 필드 또는 숫자 만 필드가 허용됩니다.

+1

감사! 그것은 작동합니다! – user2245731