按两个数字列排序

按两个数字列排序

我正在尝试根据 chr(第 2 列)和位置(第 3 列)对遗传文件进行排序,这两个文件都从低到高开始。我的表在大文件中是这样的

SNP CHR BP  A1  A2  effect_allele_frequency BETA    standard_error  P
rs10875231  1   100000012   T   G   0.405   -0.0456807  0.02260471  0.04335677
rs6678176   1   100000827   C   T   0.383   0.02553138  0.02287662  0.2645817
rs78590530  1   100000948   A   G   0.016   0.171376    0.08757958  0.05035017
rs149636485 1   100001060   A   G   0.004   -0.03363731 0.1819208   0.8529224

我想以一种从低到高的方式对 CHR(从 1 到 22)进行排序,忽略其他列并分别为每个 chr。我尝试过这个排序命令

sort -t $'\t' -nk3 myfile.tsv | sort -t $'\t' -nk2  > test.txt

它给出了 chr 中的顺序(第 2 列),但没有给出位置(第 3 列)。看来第一列会干扰:

SNP CHR BP  A1  A2  effect_allele_frequency BETA    standard_error  P
rs1000033   1   226580387   G   T   0.416   0.02958699  0.02295015  0.1971771
rs1000050   1   162736463   T   C   0.378   0.06136397  0.02293639  0.007468015
rs1000070   1   222359612   C   T   0.381   0.02563547  0.02294139  0.2638107
rs1000073   1   157255396   G   A   0.387   -0.01470793 0.02273634  0.517414
rs1000085   1   66857915    C   G   0.024   -0.03536382 0.07555889  0.6394446
rs1000127   1   63432716    C   T   0.157   0.003052272 0.03045933  0.919875

如何仅按第 2 列然后按第 3 列排序?

答案1

您需要在一次sort调用中按排序顺序指定所有键,并且需要给出结束字段:

sort -n -k2,2 -k3,3

sort -n -k3表示通过比较从字段 3 开始的数字字符(跳过空格后)形成的数字进行排序。通过管道传送到单独的sort -n -k2字段,按第二个及后续字段的内容进行排序(直到非数字字符)。但这并不能解释你的输出......

-n请参阅和-k中的描述规格sort了解详情。

相关内容