【问题标题】:Sort a tab delimited file based on column sort command bash [duplicate]基于列排序命令bash对制表符分隔的文件进行排序[重复]
【发布时间】:2013-06-30 02:36:45
【问题描述】:

我正在尝试根据第四列对该文件进行排序。我希望文件根据第四列的值重新排序。

文件:

2   1:103496792:A   0   103496792
3   1:103544434:A   0   103544434
4   1:103548497:A   0   103548497
1   1:10363487:T    0   10363487

我希望它像这样排序:

1   1:10363487:T    0   10363487
2   1:103496792:A   0   103496792
3   1:103544434:A   0   103544434
4   1:103548497:A   0   103548497

我试过这个命令:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename>

但是我得到非法变量名错误。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: linux bash shell sorting


    【解决方案1】:

    要对第四列进行排序,只需使用-k 4,4 选择器。

    sort -t $'\t' -k 4,4 <filename>
    

    您可能还需要-V,它可以更自然地对数字进行排序。例如,产生 1 2 10 而不是 1 10 2(字典顺序)。

    sort -t $'\t' -k 4,4 -V <filename>
    

    如果您收到有关 $'\t' 的错误,请确保您的 shell 是 bash。也许您在脚本顶部缺少#!/bin/bash

    【讨论】:

    • 虽然同样的错误..非法变量名。我不知道如何解决它。我知道问题出在 $
    • 确保您使用的是 bash 而不是 #!/bin/shsh script
    • 另外,-t 选项在这里是可选的,因为“任何空白”的默认列分隔符对于您的文件来说就足够了。
    • 使用“-n”进行数字排序。
    【解决方案2】:

    我相信你的命令中有错误的$

    试试:

    sort -t\t -nk4
    

    【讨论】:

    • $'..' 是用于扩展转义序列的 bash 语法。在这种情况下,它会扩展为文字选项卡。
    • 有帮助,但不能订购为 1 2 10 而不是 1 10 2 22??
    • 这就是-n 标志应该做的事情(数字排序)。
    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多