7
列を持つファイルを変更しようとしています。 入力ファイルの例は次のとおりです。特定の列を共有する行を選択する(すべてではない)
1.txt
1 10 11 A L X3 -1.1
1 10 11 A L X1 1.1
1 13 21 A T X3 -2.1
3 11 12 A T X2 -3.1
3 11 12 K T X2 7.1
4 11 12 A T X7 -8.1
4 11 12 C T X7 -8.1
4 11 12 C T X7 11.1
は、私が最初の5列を共有しますが、最後の二つが異なるとも最初の5列を共有していない他人れ、これらの行を抽出したいです。そして、最後の列の値が最も低い行を保持したい。
予想される出力は次のようになります。それは1.txt
ファイルに2.line
との最初の5
列を共有しているため
1 10 11 A L X3 -1.1
1 13 21 A T X3 -2.1
3 11 12 A T X2 -3.1
3 11 12 K T X2 7.1
4 11 12 A T X7 -8.1
4 11 12 C T X7 -8.1
1st line
はこちらです。最後の列(-1.1 < 1.1
)の番号が最も低く、最後の行ではという文字列を11.1
よりも小さく保持しているので、それだけを保持し、他の行は同一ではないようにします最初に5
のフィールドがあります。 私が試みたのは、最初の5
列をindex
としてawk
に保存していますが、それ以外のものは印刷しないでください。そして、最後の列の番号が最も小さい行を選択しません。 コード:
awk -F"\t" '!seen[$1,$2,$3,$4,$5]++' 1.txt
その出力:
1 10 11 A L X3 -1.1
1 10 11 A L X1 1.1
1 13 21 A T X3 -2.1
3 11 12 A T X2 -3.1
3 11 12 K T X2 7.1
4 11 12 A T X7 -8.1
4 11 12 C T X7 -8.1
4 11 12 C T X7 11.1
私は最後の列の最小値を持つ最初の5
列を、共有している行を選択することはできません。 ご協力いただき誠にありがとうございます。
最後の列の値に応じてどのように選択しましたか?説明することは可能でしょうか? – bapors
私は最後の列の最小値を記録します: '$ NF
ありがとう!それを速くする方法はありますか?私の入力ファイルは膨大で、時間がかかります。 – bapors