以下のようにパイプで区切られたファイルがあります。
TEST|RALPH|JACKSON|2|3|1
TEST|STEVE|PARKER|0|1|1
TEST|MARK|WOODS|0|1|1
TEST|DAVE|KNIGHT|1|3|1
TEST|JOHN|DOE|0|1|1
列4、5、6でゼロ以外の値を持つ行をフィルタリングして別のファイルに書きたいと思います。
期待される出力
TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1
私は次のawkを使ってこれを達成しようとしています。
awk -F "|" '$4 != 0 && $5 !=0 && $6 !=0' input.txt > output.txt
awkを使ってこれを行うより良い方法があるかどうか疑問に思います。
答え1
現在のアプローチは正確で明確で宣伝されたとおりに機能するため、実際に変更する必要はありません。
しかし、より多くの熱をテストするには、次のように話します。みんなawk
列3の後に列があると、プログラムが少し長くなる可能性があります(列が多い場合)。
別の方法はループを使用することです。
$ awk -F '|' '{ for (i=4; i<=NF; ++i) if ($i == 0) next; print }' file
TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1
プログラムawk
は列3以降のすべての列の値をテストし、値が0の列が見つかるとすぐに現在の行をスキップします。 0が見つからない場合、現在の行が印刷されます。
答え2
#!/usr/bin/python
import subprocess
k=open('k.txt','r')
for i in k:
h=i.strip().split('|')
if "0" not in h[-3:]:
print "|".join(h)
output
python script.py
TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1