0
ゼロ以外の値を持つカラム/フィールドを取得するための良いアイデア。ゼロ以外の値を持つカラムを取得するAWK
データ
col1 col2 col3 .... col50
1 0 1 1
ので、出力は
col1 col3 .... col50
1 1 1
編集する必要があります:例が間違っていたので、それを編集しました。
ゼロ以外の値を持つカラム/フィールドを取得するための良いアイデア。ゼロ以外の値を持つカラムを取得するAWK
データ
col1 col2 col3 .... col50
1 0 1 1
ので、出力は
col1 col3 .... col50
1 1 1
編集する必要があります:例が間違っていたので、それを編集しました。
awk
レスキュー!
これは... awkでは
$ awk 'NR==1{split($0,h); next}
NR==FNR{for(i=1; i<=NF; i++) if($i!=0) cols[i]; next}
{for(i=1; i<=NF; i++) if(i in cols) printf "%s", $i OFS;
print ""}' file{,} | column -t
col1 col3 col50
1 1 1
、同様に複数のレコードのためのより一般的なソリューションを複数の行を処理する必要があります。
$ cat program.awk
NR>1 && NR==FNR { # find columns to output, build a arr on 1
for(i=1;i<=NF;i++)
if($i) a[i]
next
}
sub(/1/,"1") { # output only records with 1s
split($0,b," ") # split record to b arr
for(i=1;i<=NF;i++)
if(i in a) # print on a arr
printf "%s%s", b[i], (i==NF?ORS:OFS)
}
データ:
$ cat data.txt
col1 col2 col3 col4
0 0 0 0
1 0 1 0
0 0 1 1
を実行して:最初のそれは第二に、それは1秒を持つレコードを出力し、1秒とcolsのためにチェックして行く上で
$ awk -f program.awk data.txt data.txt
col1 col3 col4
1 1 0
0 1 1
あなたは何を試してみましたか?すべてのデータとヘッダー行を除く各行のすべての値が少なくとも1つの非ゼロ値を含んでいることを確認する必要があります。すべての行のデータを読むまでは、ヘッダー行以外は印刷できません。それはAwkにとっては問題になります。 –
ジョナサン、実際に私が持っていた例は間違っていました。それを指摘してくれてありがとう。 –
入力ファイルは実際には2行、1行のヘッダー行と1行のデータ行ですか?または、最初の行を除く各行のゼロでない要素を表示するだけですか?または、関連する見出しと各行の関連する列を印刷する必要があります(見出しのサブセットとして出力行1、行1の非ゼロデータとして行2、見出しのサブセットとして行3、行2の非ゼロデータとしての行4など)?または何?もともとそうだったよりも単純なら、もう一度何を試しましたか?しかし、あなたは本当に入力と出力をより明確に説明する必要があります。 –