すべての列の値が0の場合(つまり、行の合計が0の場合)、ファイル内のすべての行を削除する必要があります。
私のファイルは次のとおりです(13列、60000行、タブ区切り)。
KO gene S10 S11 S12 S1 S2 S3 S4 S5 S6 S7 S8 S9
K02946 aap:NT05HA_2163 0 0 0 0 1 0 8 0 0 5 0 0
K06215 aar:Acear_1499 0 0 0 0 0 0 8 0 0 0 0 0
K00059 acd:AOLE_11635 0 0 5 0 0 0 0 0 8 0 0 0
K00991 afn:Acfer_0744 0 0 0 0 0 0 0 0 0 0 0 0
K01784 aha:AHA_2893 0 0 0 0 0 0 7 0 0 0 0 0
K01497 amd:AMED_3340 0 0 0 0 0 0 0 0 0 0 0 0
どうですか?
答え1
解決策が必要な場合awk
:
awk '{s=0; for (i=3;i<=NF;i++) s+=$i; if (s!=0)print}' infile > outfile
スクリプトを開始するために最初の行を2行目のタイトルとして保持するには、次のようにします。
awk 'NR > 1{s=0; for (i=3;i<=NF;i++) s+=$i; if (s!=0)print}' infile > outfile
答え2
列に負以外の数字のみが含まれている場合は、ゼロより大きい数字を含む1つ以上のフィールドを含む行を印刷してください。
そしてperl
:
$ perl -MList::Util=first -anle '
print if first {$_ > 0} @F or $. == 1;
' file
KO gene S10 S11 S12 S1 S2 S3 S4 S5 S6 S7 S8 S9
K02946 aap:NT05HA_2163 0 0 0 0 1 0 8 0 0 5 0 0
K06215 aar:Acear_1499 0 0 0 0 0 0 8 0 0 0 0 0
K00059 acd:AOLE_11635 0 0 5 0 0 0 0 0 8 0 0 0
K01784 aha:AHA_2893 0 0 0 0 0 0 7 0 0 0 0 0
あなたは読まなければなりませんこの問題ソリューションを使用する場合は、セキュリティ上の理由からperl
。
そしてawk
:
$ awk 'FNR == 1{print;next}{for(i=3;i<=NF;i++) if($i > 0){print;next}}' file