이 파일이 있어요
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
( -P
Perl 정규식의 경우):
grep -P '\s200\s' file
순수해야 하는 경우 bash
:
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file
공백, 탭 등이 있는지 확실하지 않은 경우( 위 및 솔루션 [[:space:]]
과 유사 ):\s
sed
grep
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file
답변3
나는 이것이 도움이 될 것이라고 생각합니다. 그러면 패턴이 포함된 행만 인쇄됩니다. 귀하의 경우 모드는 200입니다.
grep '200' file-name