행의 정확한 문자열 일치
이 파일이 있습니다.
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
하지만 모든 줄이 있습니다.
댓글
답변
정확한 일치를 원하므로 ==
를 사용하지 않으시겠습니까?
$ 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:]]
는 위의 sed
및 grep
솔루션에서 \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
awk
코드가 한 줄? 이것이 무엇을해야하는지 이해하기까지 했습니까?