合計がゼロの行を削除

合計がゼロの行を削除

すべての列の値が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

関連情報