特定の開始文字を含む値の Grep 範囲

特定の開始文字を含む値の Grep 範囲

特定のテキスト(TY [0-9]など)の発生回数を計算したい10 GBのファイルがあります。

サンプルファイル:

ABC,2A,2018-07-06,2018-06-20 00:00:00
BCD,TY1,2018-07-06,2018-06-20 00:00:00
EFG,TY2,2018-07-06,2018-06-20 00:00:00
IGH,2A,2018-07-06,2018-06-20 00:00:00

TY数字で始まるすべてのテキストの数を取得したいです。 egrepを使ってみましたが、正しい結果が得られませんでした。

egrep  "^TY[0-9]" Filename

ベストアンサー1

試した解決策の主な問題は、TY文字列の先頭(表現式を固定する位置^)で突き出る音が発生すると仮定することです。 2番目のカンマ区切りフィールドの先頭に表示されます。


awkファイル内の2番目のカンマ区切りフィールドが文字列と数字で始まる回数を計算するために使用されますTY

awk -F, '$2 ~ /^TY[[:digit:]]/ { n++ } END { print n }' filename

cutと一緒に使用する方が速いのではないかと思いますgrep。 2番目の列を削除すると、処理するデータが少なくなるため、単独で実行するよりも速度が速くなりますgrepgrep

cut -d, -f2 filename | grep -c '^TY[[:digit:]]'

…でもよく分からない。


私のOpenBSDシステムで1.1GBファイルでいくつかのテストを行った結果、+は実際にはcut(8秒対15秒)よりもgrepほぼ50%速かったです。awkそして純粋なgrep溶液(grep -Ec '\<TY[0-9]' filename、からインポートグレンのソリューション)13秒かかります。

したがって、2番目のフィールドで文字列を選択した場合は、一致する前にそのフィールドを抽出することで時間を節約できます。

おすすめ記事