web-dev-qa-db-ja.com

フィールド値が空白の行をgrepおよび削除します

テキストファイルの空白のフィールド値を探して行全体を削除するコマンドがあるかどうか疑問に思いました。

 Hello:Its Me
 Hello:How are you
 Hello:
 Hello:Bye

そして期待される出力

 Hello:Its Me
 Hello:How are you
 Hello:Bye
2
John Wick

非常に標準的なケースで、awkを使用した最も単純なソリューションは次のようになります。

awk -F: '$2 != ""' file

grep

grep :. file 
5
jimmij

スキップするつもりならHello:次のような行を使用できます。

awk -F: '{if($2 != "") print }' input_file 
3
Romeo Ninov

少なくともGNU awkで、どのバージョンのawkでも、何かがtrueと評価されたときのデフォルトのアクションは印刷することだと思います。したがって、フィールド区切り文字をに設定すると、 :、2番目のフィールドがある行を印刷するには、必要なのは次のとおりです。

$ awk -F: '$2' file
Hello:Its Me
Hello:How are you
Hello:Bye

ただし、これは2番目のフィールドが空白(スペース、タブなど)の場合も出力しますが、2番目のフィールドが1つまたは複数の場合はnot 2行を出力します0s、awkはこれをfalseと評価するため。

2
terdon

削除条件を定義する方が簡単な場合もあります(grep -v)。最後のフィールドが空の場合の削除の例:

grep -v ':$' file
0
JJoao