Linuxでは、数値、文字、区切り文字を使用して特定の列を並べ替えます。

Linuxでは、数値、文字、区切り文字を使用して特定の列を並べ替えます。

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

おすすめ記事