4つの列と10000行のデータがあります。 2番目の列の値が前の行の3番目の列より小さい行を削除しようとしています。
chr1 10 20 3
chr1 15 30 9
chr1 55 60 1
答え1
awk '$2 >= prev; {prev=$3}' file.txt
説明する
awk <commands> file.txt
:awkを実行してくださいfile.txt
。$2 >= prev
:2番目のフィールドが$2
変数の内容以上であることを確認してくださいprev
。 (最初の行は設定されません。)これがtrueの場合、awkはデフォルトで行全体を印刷します。 (つまり、以下より小さい場合は行を削除します。){prev=$3}
:3番目のフィールドの内容を$3
変数に保存しますprev
。
次に、次の行に対してこれを繰り返します。 awkは、2番目のフィールドをprev
前の行の3番目のフィールドを含むものと比較します。参考にするいくつかの点があります。
- 最初の行に何をしたいのかわからないので、必要に応じて手動で含める/除外します。
- データが実際にタブで区切られている場合は、awkに次のフラグを追加して通知します
-F'\t'
。