Awk :

행의 정확한 문자열 일치

이 파일이 있습니다.

a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z 

그리고 awk를 사용하여 정확한 문자열 200을 일치 시키려고합니다. 따라서 결과는

a deiauk Biking US 200 G 

여기에 내 코드

awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt 

하지만 모든 줄이 있습니다.

댓글

  • awk 코드가 한 줄? 이것이 무엇을해야하는지 이해하기까지 했습니까?
  • 당신의 awk는 i) 두 번째 필드가 ; ii) 첫 번째 필드 및 iii) 두 번째 필드. 전체 행을 인쇄 할 것으로 예상하는 이유는 무엇입니까? 실제로 어떤 결과를 얻고 있습니까?

답변

정확한 일치를 원하므로 ==를 사용하지 않으시겠습니까?

$ cat >file a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z a auie auie 200 B b nrst nrst 200 C $ awk "$(NF-1)==200{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 

/^200$/로 경기를 제한 할 수도 있습니다.

$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 

편집 :

명령을 시도했는데 제대로 작동합니다. -F " "가 확실한가요?

Comm ents

  • -F ' '는 괜찮습니다. ' 이유를 모르겠지만 여전히 같은 문제가 있습니다.

답변

awk 사용 :

awk "$0~/ 200 /" file 

또는 sed (\s는 모든 공백과 일치) :

sed -n "/\s200\s/p" file 

A grep 솔루션 (perl 정규식의 경우 -P) :

grep -P "\s200\s" file 

순수 bash :

while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file 

공백, 탭 등이 있는지 확실하지 않은 경우 ([[:space:]]는 위의 sedgrep 솔루션에서 \s와 같습니다. ) :

while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file 

댓글

  • grep -P 없이도 작동합니다. grep '\s200\s' file

답변

나는 s가 도움이 될 것입니다. 패턴이 포함 된 라인 만 인쇄됩니다. 귀하의 경우 패턴은 200입니다.

grep "200" file-name 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다