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

Vig*_*esh 19 linux sorting bash shell

我试图根据第四列对此文件进行排序.我希望文件根据第四列的值重新排序.

文件:

2   1:103496792:A   0   103496792
3   1:103544434:A   0   103544434
4   1:103548497:A   0   103548497
1   1:10363487:T    0   10363487
Run Code Online (Sandbox Code Playgroud)

我希望它像这样排序:

1   1:10363487:T    0   10363487
2   1:103496792:A   0   103496792
3   1:103544434:A   0   103544434
4   1:103548497:A   0   103548497
Run Code Online (Sandbox Code Playgroud)

我试过这个命令:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename>
Run Code Online (Sandbox Code Playgroud)

但我得到非法变量名称错误.有人可以帮我这个吗?

Joh*_*ica 47

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

sort -t $'\t' -k 4,4 <filename>
Run Code Online (Sandbox Code Playgroud)

您可能还想要-V更自然地对数字进行排序.例如,屈服1 2 10而不是1 10 2(词典顺序).

sort -t $'\t' -k 4,4 -V <filename>
Run Code Online (Sandbox Code Playgroud)

如果你遇到错误,$'\t'那么确保你的shell是bash.也许你错过#!/bin/bash了脚本的顶部?

  • 此外,`-t`选项在这里是可选的,因为"any whitespace"的默认列分隔符对于您的文件就足够了. (2认同)