【问题标题】:numerical sorting but keeping duplicates数字排序但保留重复
【发布时间】:2016-08-21 06:33:39
【问题描述】:

我正在对一个包含近 900 行的文件进行数字排序。对于其他人的命令

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

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

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

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

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

编辑/澄清:

当我按数字对所有行进行排序后,我需要以某种方式将具有相同数字的行组合起来,以便将新信息添加到上一行。以没有 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

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

谢谢:)

【问题讨论】:

  • 我在 Linux、Fedora 24 上试了一下,得到了 1021 行的输出。
  • 行号听起来不错。在我的 Mac 上不起作用...
  • @Ditte,你关心哪一行是“上”行吗?与原始文件中的顺序相比,我担心之前的数字排序可能会以任意方式更改具有相同数字的行的顺序。
  • @mike.dld 恐怕我有 :(

标签: bash macos sorting tr numerical


【解决方案1】:

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

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 行。

【讨论】:

  • 我可以让它工作!谢谢!任何线索我如何做线的组合?
  • 嗯,你需要修改这个问题,因为现在还不清楚应该如何组合这些行。例如。在您的数据文件中有 2 行以数字“2”开头,它们在各个列中具有不同的值:“dnaA”与“dnaN”、“DNA_polymerase_III_beta_subunit”与“DNA 聚合酶 III、β 亚基、滑动夹”。没有简单的答案。
【解决方案2】:

我在 MAC 上。我从 tr 和 sed 复制了问题illegal byte sequence。它是 OS X 上设置的语言环境,或者我应该说“未设置”。输入locale 命令,你就会明白我的意思了。这些是在终端应用程序设置中设置的,或者您可以自己设置。

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

所以我这样做了:

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

这看起来还不错。

您可能希望添加:

export LC_ALL=C

发送至您的.bash_profile,而不是更改您的终端设置。

【讨论】:

  • 在全球范围内设置LC_ALL=C 是一个可疑的建议;它将在许多地方关闭有用的功能。这是处理不正确编码的一个很好的解决方法,但大多数时候,您希望 UTF-8 在现代系统上工作。
猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多