結果は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
誤ってエンコードされたテキストの問題を回避するには、アンダーを実行します(検索される文字列と区切り文字()がASCII形式のLC_ALL=C
場合)。,
$ printf '1,\200,3,4,5,6,Nature Life,8\n' |
LC_ALL=C grep -cE '^([^,]*,){6}[^,]*Nature Life'
1