결과는 124입니다.
awk 'BEGIN {FS = ","; count = 0}; { if ($7 ~ /Nature Life/) { count++ }} END {print count}' file.csv
결과는 123입니다.
grep -cE '^([^,]*,){6}[^,]*Nature Life' file.csv
파일이 너무 커서 읽을 수 없습니다.
어떤 제안이 있으십니까?
답변1
불일치를 발견하려면 awk는 포착했지만 grep은 포착하지 못한 줄이 다음과 같이 표시되어야 합니다.
awk 'BEGIN{FS=","}$7~/Nature Life/' file.csv | grep -vE '^([^,]*,){6}[^,]*Nature Life'
여기서 목표는 awk가 보는 모든 것을 인쇄한 다음 grep이 보는 모든 것을 필터링하는 것입니다(grep -v). 귀하의 grep 정규식이 귀하가 찾고 있는 것과 100% 일치하지 않을 가능성이 높습니다.
답변2
grep
UTF-8 로케일에서, 적어도 GNU의 경우, UTF-8을 형성하지 않는 바이트 시퀀스가 포함되어 있으면 ,[^,]*,
일치하는 항목이 없습니다.,something,
something
유효한 문자.
예를 들어:
$ printf '1,\200,3,4,5,6,Nature Life,8\n' |
grep -cE '^([^,]*,){6}[^,]*Nature Life'
0
그러나 awk 필드 분할의 경우 이는 중요하지 않습니다.
$ printf '1,\200,3,4,5,6,Nature Life,8\n' | awk -F, '$7 ~ /Nature Life/'
1,�,3,4,5,6,Nature Life,8
grep
잘못 인코딩된 텍스트 문제를 방지하려면 under를 실행하세요 (검색되는 문자열과 구분 기호( )가 ASCII 형식인 LC_ALL=C
경우 ).,
$ printf '1,\200,3,4,5,6,Nature Life,8\n' |
LC_ALL=C grep -cE '^([^,]*,){6}[^,]*Nature Life'
1