如何使用Linux命令排序排序的文本文件根据第4列,数字顺序?

rdrgkggo  于 2023-06-29  发布在  Linux
关注(0)|答案(4)|浏览(136)

我有一个像这样的文件(它是空格分隔的):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067

我想使用sort命令来根据第4列对文件进行排序。我在互联网上到处查找,我发现不同的解决方案,修女的作品!我甚至在Stack Overflow中发现了类似的问题,但答案对我不起作用!所以这些是我正在使用的命令,但不起作用!

sort -n -k 4,1 out1.txt
sort -n -k 4 out1.txt
sort -n -k4 out1.txt
sort -nk4 out1.txt
sort +4 out1.txt

因此,在运行所有这些命令后,我得到以下输出(与我的输入相同):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067

我想得到这样的输出:

AX-19 Chr1_419087 1 41908741 T C 0 15 0.067
AX-20 Chr1_419087 1 41908740 T C 0 13 0.067
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
eoxn13cs

eoxn13cs1#

sort -nk4 file

-n for numerical sort
-k for providing key

或添加-r选项进行反向排序

sort -nrk4 file
qpgpyjmq

qpgpyjmq2#

sort不对文件进行就地排序。相反,它输出一个已排序的副本。
您需要sort -n -k 4 out.txt > sorted-out.txt

**编辑:**要获得你想要的顺序,你必须对文件进行排序,数字 * 反向读取 *。这样做:

cut -d' ' -f4 out.txt | rev | paste - out.txt | sort -k1 -n | cut -f2- > sorted-out.txt

oalqel3c

oalqel3c3#

应该是的

sort -k 4n out1.txt

刚刚用GNU sort(--debug enabled)测试了这个:

$ tac input | /bin/sort --debug -k 4n
/bin/sort: using simple byte comparison
/bin/sort: key 1 is numeric and spans multiple fields
AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
                    ________
___________________________________________
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
                    ________
___________________________________________
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
                    ________
___________________________________________
mi7gmzs6

mi7gmzs64#

需要说明的是,如果文件的每一行中的单词都由分隔符(除了'space')分隔,我们可以使用“-t”选项指定分隔符:

sort -n -t',' -k4 file -o outfile

我们可以在任何指定的输出文件中获得排序输出(使用“-o”选项),而不是在标准输出中显示输出。
来源:http://www.thegeekstuff.com/2013/04/sort-files/

相关问题