awk: 줄의 정확한 문자열과 일치

awk: 줄의 정확한 문자열과 일치

이 파일이 있어요

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

을 사용하여 정확한 문자열 200을 일치시키고 싶습니다 awk. 그래서 내 결과는

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

그러나 그 후에 나는 모든 대사를 얻었습니다.

답변1

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

$ 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 ' '?

답변2

을 사용하면 다음과 awk같습니다.

awk '$0~/ 200 /' file

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

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

해결책 grep( -PPerl 정규식의 경우):

grep -P '\s200\s' file

순수해야 하는 경우 bash:

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

공백, 탭 등이 있는지 확실하지 않은 경우( 위 및 솔루션 [[:space:]]과 유사 ):\ssedgrep

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

답변3

나는 이것이 도움이 될 것이라고 생각합니다. 그러면 패턴이 포함된 행만 인쇄됩니다. 귀하의 경우 모드는 200입니다.

grep '200' file-name

관련 정보