Linux端末の「最後の列」にゼロを含む行を削除する方法は?

Linux端末の「最後の列」にゼロを含む行を削除する方法は?

"0".tsv最後の列の値が複数のファイルにある場合(すべてのファイルの最後の列番号が同じでない可能性がある)、行を削除する方法を知りたいです。列の総数はファイルごとに大きく異なります。

awk正確に言えば、orの中にある行を探していますsed

これはファイルの最初の数行と列であり.tsv、最後の列は"0"削除する必要がある列です。ただし、最後の列番号はすべてのファイルに対して同じではありません。

$cut -f1-10 temp_13jLiC.bed | awk '{c=0;for(i=4;i<=NF;++i){c+=$i};print $0, "", c}' | head -n 10 | sed 's/ /\t/g' 

chr1    0   100  .  .   .   .   .   .   .       0
chr1    100 200  .  .   .   .   .   .   .       0
chr1    200 300  .  .   .   .   .   .   .       0
chr1    300 400  .  .   .   .   .   .   .       0
chr1    400 500  .  .   .   .   .   .   .       0
chr1    500 600  .  .   .   .   .   .   .       0
chr1    600 700  .  .   .   .   .   .   .       0
chr1    700 800  .  .   .   .   .   .   .       0
chr1    800 900  .  .   .   .   .   .   .       0
chr1    900 1000 .  .   .   .   .   .   .       0

ベストアンサー1

私は何をしますか:

awk '$NF != 0'

または、bedはタブ区切りの形式なので、フィールド内のスペースを許可します。

awk -F'\t' '$NF != 0'

$NF自動的にそして魔法的に最後の列です。

最後の列が0²の場合、行は印刷されません。


1レコードに1つ以上の列がある限り。NFそれ以外の場合、0and $0(変数と混同しないように$数値に適用される演算子0)はレコード全体です。

²厳密に言うと、これは実装で認識されている数字0の表現ですawk。これにはのようなものも含まれますが、000時には実装やロケールや環境に依存します / 、 、 または 。テキストのみを許可するには、次のように置き換えます。-00E+12awk0.000,000x00x0p121e-5000XFFP-23450$NF != "0"

おすすめ記事