このようなファイルがありますが、2番目の列に数字以外の文字を含むすべての行を削除したいと思います。
AC 14 68123822 68123928
AC 16 34977639 34990886
AG 2 162266065 162266181
AC RS00192.1 415332 415454
AD RS00228.1 20113 20230
AC ST00228.1 22673 22791
AC ME103_ID 190936293 190936410
AD ME103_ID 190938851 190938969
AH ME145_ID 147089817 147089932
削除された行数を計算する方法はありますか?ありがとうございます!
ベストアンサー1
$ awk 'BEGIN {count=0};
NF>1 && $2 ~ /^[[:digit:]]+$/ {print;next};
{count++};
END { print "Removed " count " lines." }' input.txt
AC 14 68123822 68123928
AC 16 34977639 34990886
AG 2 162266065 162266181
Removed 6 lines.
小数点が問題ない場合は、代わりに以下を使用してください。
$ awk 'BEGIN {count=0};
NF>1 && $2 ~ /^[[:digit:]]+(\.[[:digit:]]+)?$/ {print;next};
{count++};
END { print "Removed " count " lines." }' input.txt
このバージョンの出力は、小数点を持つ純粋な数字の2番目のフィールドがないという点で、入力例と同じです。
ただし、デフォルトの出力から削除された行数が必要ない場合は、デフォルトのstdoutの代わりにstderrとして印刷できます。 ENDブロックを次に置き換えます。
END { print "Removed " count " lines." > "/dev/stderr" }