【问题标题】:bash: different sort output on files with identical first columnbash:具有相同第一列的文件的不同排序输出
【发布时间】:2013-06-26 10:03:09
【问题描述】:

抱歉标题含糊,我想不出更好的...

我有 2 个制表符分隔的文件,它们的第一列相同(总列数不同)。我想按两个文件的第一列排序。

我想我可以使用 -t\t 选项或 -k1,12 选项来做到这一点(因为第一列永远不会超过 12 个字符。)这两个选项都会产生相同的(错误的)输出。

尽管两个文件的第一列相同,但它们的排序方式不同。请注意,在 file1 上我得到 23,29,2; file2,我得到 2,23,29。

$ head  file1 | sort -t\t | cut -f1
rs1000000
rs10000010
rs10000012
rs10000013
rs10000017
rs10000023
rs10000029
rs1000002
rs10000030

$ head file2 | sort -t\t | cut -f1
rs1000000
rs10000010
rs10000012
rs10000013
rs10000017
rs1000002
rs10000023
rs10000029
rs10000030

如何对两个文件进行排序,以使第一列在每个文件中的顺序相同? 谢谢!

【问题讨论】:

    标签: bash sorting csv


    【解决方案1】:
    sort -t $'\t' -k 1,1
    

    使用$'\t' 让shell 将\t 解释为制表符,因为sort 不解析转义序列。使用-k 告诉它只对第一个字段而不是整行进行排序。

    如果您希望2010 之间排序,您可能还需要-V 标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2012-06-24
      • 2017-05-01
      • 1970-01-01
      • 2016-04-25
      相关资源
      最近更新 更多