2012-04-11 8 views
0

텍스트를 stdout으로 보내는 프로그램이 있습니다. 하지만 나는 다섯 번째 열이 '*'가 아닌 행만 유지하려고합니다. 그것은 별표 문자입니다. 모든 것을 잡는 정규 표현식이 아닙니다. 나는 이것에 대한 탈출을 사용할 수없는 것, 내가 해봤특정 열이있는 행만 인쇄하십시오 *

./a.out |awk '$5!=* {print}' 
awk: $5!=* {print} 
awk: ^syntax error 
./a.out |awk '$5!=\* {print}' 
awk: $5!=\* {print} 
awk: ^backslash not last character on line 

awk는 물론하지 요구 사항입니다,하지만 난이 간단한 것이라고 생각.

감사

답변

4

awk 가장 알골/C 계열 언어와 유사하다; 리터럴 문자열에는 문자열 따옴표가 필요합니다.

awk '$5 != "*" {print}' 
+2

awk''에 대한 기본 작업을 인쇄 할 수 있기 때문에, 당신은 간단하게 작성할 수 있습니다!'AWK '$ 5 = "*"'파일 이름 – JRFerguson

+0

을 당신은 필요하지 않습니다 print 명령을 사용하면 awk : awk '$ 5! = "*"''의 기본값이됩니다. – jfg956

2

이 시도 : 펄에서

awk '$5!="*"{print}' 
1

:

perl -ane 'print unless $F[4] eq q(*)' file 

-n 스위치는 명령 줄에서 파일 이름 인수 (들)을 읽고이 루프 aaround 스크립트를 래핑 :

LINE: 
while (<>) { 
    ... # your script here 
} 

-a은 공백에있는 라인의 자동 분리를 @F. Unlike이라는 미리 선언 된 배열에 포함시킵니다. awk` $ F [0]은 첫 번째 필드입니다.

-e 인수는 단순히 귀하의 스크립트입니다.

+0

'-n' 스위치는이 루프를 스크립트 주위에 추가하여 하나 이상의 파일 이름 인수 : – JRFerguson

-1

이 당신을 위해 작동 될 수 있습니다

awk '$5 !~ /^[*]$/' file 
+0

-1을 읽습니다. 고정 문자열 비교를 수행하는 데 사용할 수없는 정규식 사용. – Kaz

+0

@kaz 의도는'*'가 클래스 문자로 인용되지 않은 것으로 표시 될 수 있다는 것을 보여주는 것이 었습니다. – potong

+0

거의 인용되지 않았습니다. 내부에 감싸 인^[,] 안에 감싸 이는 [] 안에 싸여 있습니다. – Kaz

관련 문제