我正在处理一个包含3个值的文件,一个ID(如果您感兴趣,它们恰好是蛋白质ID),一个值,然后是另一个值。它是用制表符分隔的,因此看起来像这样:
我对将这些ID按字母顺序排序并提取各种值感兴趣。然而,我注意到根据我提取的内容,sort会以不同的方式对ID进行排序。当我执行以下操作时:
生成的文件是:
但是当我执行时:
我明白了。
请注意,AARS和AARS2的位置被交换了,这是不应该的,因为我只是根据第一列进行排序。我从来没有见过sort会有这样的行为,而且我已经使用bash有一段时间了。这是一个bug吗,还是我做错了什么?
A2M 0.979569315988908 1
AACS 0.925340159491081 1
AAGAB 0.982296215686199 1
AAK1 0.736903840140103 1
AAMP 0.00589711816127862 0.138868449447202
AARS2 1 1
AARS 3.13300124295614e-05 0.00212792325492566
AARSD1 0.527417792161261 1
AASDH 0.869909252023668 1
AASDHPPT 0.763918221284724 1
AATF 0.691907759125663 1
ABAT 0.989693691462661 1
ABCA1 0.601194017450064 1
ABCA5 1 1
ABCA6 1 1
我对将这些ID按字母顺序排序并提取各种值感兴趣。然而,我注意到根据我提取的内容,sort会以不同的方式对ID进行排序。当我执行以下操作时:
cut --fields\=1,2 input.txt|sort --key=1
生成的文件是:
A2M 0.979569315988908
AACS 0.925340159491081
AAGAB 0.982296215686199
AAK1 0.736903840140103
AAMP 0.00589711816127862
AARS2 1
AARS 3.13300124295614e-05
AARSD1 0.527417792161261
AASDH 0.869909252023668
AASDHPPT 0.763918221284724
AATF 0.691907759125663
ABAT 0.989693691462661
ABCA1 0.601194017450064
ABCA5 1
ABCA6 1
但是当我执行时:
cut --fields\=1,3 input.txt|sort --key=1
我明白了。
A2M 1
AACS 1
AAGAB 1
AAK1 1
AAMP 0.138868449447202
AARS 0.00212792325492566
AARS2 1
AARSD1 1
AASDH 1
AASDHPPT 1
AATF 1
ABAT 1
ABCA1 1
ABCA5 1
ABCA6 1
请注意,AARS和AARS2的位置被交换了,这是不应该的,因为我只是根据第一列进行排序。我从来没有见过sort会有这样的行为,而且我已经使用bash有一段时间了。这是一个bug吗,还是我做错了什么?
cut
函数时,你不需要转义(或者使用)等号(=
)。 - chepner