列の選択

列の選択

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

関連情報