对 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 忽略空格并仅使用:字符作为字段分隔符。

尝试这个:

$ 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 选项进行“版本排序”,但仅按第二个字段排序。

更好的是,将标题行保留为第一行:

$ 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

相关内容