基于列排序命令bash对制表符分隔文件进行排序

时间:2013-07-02 16:09:34

标签: linux bash shell sorting

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

档案:

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>

但是我得到非法的变量名称错误。有人可以帮我吗?

2 个答案:

答案 0 :(得分:45)

要对第四列进行排序,请仅使用-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

答案 1 :(得分:3)

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

尝试:

sort -t\t -nk4