awkとgrepの他の結果

awkとgrepの他の結果

結果は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

grepUTF-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

関連情報