
Linuxでは、数字、文字、区切り文字を含む一部のデータ(900万行)を使用して特定の列(列2)を並べ替えようとしました。
chr position p-value
10 chr10:6754:SG 0.2
1 chr1:68789:SG 0.6
16 chr16:68789:IG 0.88
9 chr9:68789:IG.0 0.4
1 chr1:8885436:SG:0 0.02
10 chr10:6788554:SG 0.01
私が望む出力ファイル:
このコードを実行します。 sort -V -t: -k2,4n myfile >sortedfile
ただし、出力ファイルがソートされていません
答え1
問題は-t:
オプションです。スペースを無視し、文字:
のみをフィールド区切り文字として使用するようにソートに指示します。
この試み:
$ sort -V -k2,2 input.txt
1 chr1:68789:SG 0.6
1 chr1:8885436:SG:0 0.02
9 chr9:68789:IG.0 0.4
10 chr10:6754:SG 0.2
10 chr10:6788554:SG 0.01
16 chr16:68789:IG 0.88
chr position p-value
これはまだ「バージョンソート」に-Vオプションを使用しますが、2番目のフィールドでのみソートされます。
より良い方法は、ヘッダー行を最初の行として保持することです。
$ head -n 1 input.txt ; tail -n +2 input.txt | sort -V -k2,2
chr position p-value
1 chr1:68789:SG 0.6
1 chr1:8885436:SG:0 0.02
9 chr9:68789:IG.0 0.4
10 chr10:6754:SG 0.2
10 chr10:6788554:SG 0.01
16 chr16:68789:IG 0.88