A、B、D、E列の値の1つ以上がゼロ以外の行を収集する必要があります。
以下はデータです。
A B C D E G
ES-N . | 0 0 12 | 0 0 100
SES-N . | 1 0 10 | 0 0 10
UAS-N . | 0 0 10 | 0 0 10
CSS-N . | 0 0 10 | 0 5 10
BBE-N . | 0 0 15 | 0 0 125
希望の出力:
A B C D E G
SES-N . | 1 0 10 | 0 0 10
CSS-N . | 0 0 10 | 0 5 10
Unixプラットフォームで実行できるシェルスクリプトを提供してください。
次のようにしましたが、C列とG列のため、「0」は削除されませんでした。
#lin is the count of line in the file
for (( i=1; i<=$lin; i++ ));
do
sed -n -e ""$((ini + 1)),$fin"p" /file
egrep '1|2|3|4|5|6|7|8|9' /file1
if [[ $? -eq 0 ]]
then
sed -n -e ""$ini"p" /file
答え1
awkを使用してください:
awk -n '$4 !=0 || $5 != 0 || $8 != 0 || $9 != 0 {print $0}' filename
答え2
簡単に次のようにすることもできます。
awk '$4+$5+$8+$9' infile
そしてヘッダー行を保持します。
awk 'NR==1 || $4+$5+$8+$9' infile
答え3
@unxnutのawk
ソリューションはより柔軟ですが、特定のケースでは要件が簡単でファイル形式が簡単なので、この方法grep
も効果があるかもしれません。
ゼロ以外の1つ以上の値を含む行を含めることは、その値がすべてゼロの行を除外するのと同じです。このgrep
コマンドは、次の2つのインスタンスを含む行を見つけます。
- 縦棒の後にスペースが続きます。
- 0の後にスペースが続く
- 別のゼロの後にスペースが続きます。
パターンの2つのインスタンスに一致する行(つまり、4つの値がすべてゼロの行)は次のとおりです。削除済み。残りの行を表示:
$ egrep -v '(\| *0 *0 .*){2}' infile
A B C D E G
SES-N . | 1 0 10 | 0 0 10
CSS-N . | 0 0 10 | 0 5 10