数字排序,但保持重复

时间:2016-08-21 06:33:39

标签: bash macos sorting tr numerical

我用几乎九百行来用数字排序文件。对于其他命令

tr '\r' '\n' < myfile.txt | sort

tr '\r' '\n' < myfile.txt | sort -n

似乎可以解决问题,但对我来说,我没有得到我想要的输出(只有两百行)。我可以看到所有重复的数字都丢失在我的Mac上,我得到终端错误“tr:非法字节序列”。

我做错了什么,为什么我不知道如何保存文件?它可以与具有空白列的文件有关吗?

文件在这里: dropbox.com/s/umzx64c5ix90l3y/Proteins.txt?dl=0

EDIT /澄清:

当我以数字方式对所有行进行排序时,我需要以某种方式组合具有相同数字的行,以便将新信息添加到上面的行。比如没有61的行:

Col   1     2      3     4       5       6         7         8      9   10    11
     61 PTS...  cyt   1bl..   0,38  MONOMER homo-trimer FRUC... PER...Bac..
     61 PTS...                                                                 3

变为:

Col   1     2      3     4       5       6         7         8      9   10    11
     61 PTS...  cyt   1bl..   0,38  MONOMER homo-trimer FRUC... PER...Bac..   3

如果两条线中都有重叠的信息,我需要保留上一行的信息。

谢谢:)

2 个答案:

答案 0 :(得分:0)

您的文件未正确使用UTF-8编码,而您的语言环境肯定设置为UTF-8。第195行包含(无效序列标有<HEX>):

1945    comM    protection against fracitins/bacteriocins (found by comparison to spr genome according to H<CE>varstein 2006)   integral membrane protein (H<CE>varstein)   no model

找出编码是什么,然后将文件转换为正确的编码或将语言环境更改为容纳。只需尝试

env LC_ALL=C tr '\r' '\n' < Proteins.txt | sort -n

似乎对我有用,给出1021行。

答案 1 :(得分:0)

我在MAC上。我从tr和sed再现了问题illegal byte sequence。它是在OS X上设置的语言环境,或者我应该说“未设置”。输入locale命令,您将看到我的意思。这些是在终端应用程序设置中设置的,或者您可以自己完成。

许多应用程序的默认语言环境可以是CPOSIX,基本上是ASCII。

所以我这样做了:

LC_ALL=C tr '\r' '\n' < myfile.txt | sort -n 

这似乎没问题。

您可能希望添加:

export LC_ALL=C

.bash_profile,而不是更改终端设置。