在Bash中按顺序对文件进行排序

43

使用之前的Bash脚本我创建了一个文件列表:

data_1_box
data_2_box
...
data_10_box
...
data_99_box

问题是现在我需要将它们连接起来,所以我尝试使用

ls -l data_*

但是我得到了:

.....
data_89_box
data_8_box
data_90_box
...
data_99_box
data_9_box

但我需要按照1,2,3,4 ... 9,...,89,90,91,...,99的顺序进行操作。这可以在bash中完成吗?

8个回答

83
ls data_* | sort -n -t _ -k 2

-n: 按数字排序
-t: 以"_"作为字段分隔符
-k: 根据第二个字段排序,对于您的情况是第一个"_"后面的数字

我多年来一直使用sort,从未费心阅读手册——看来我真的错过了很多。谢谢! :-) - ssc
在我的情况下,不要按正确顺序排序文件(Linux - Bullseye 11)(但是ls -lv可以)。 - Estatistics
我刚在Bullseye 11中进行了测试。使用问题中提供的文件名可以正常工作,@EliasEstatisticsEU,你的文件名是否不同?请参见https://pastebin.com/yR139m02 - Puppe
是的,像1.jpg、2.jpg... 10.jpg、11.jpg... 20.jpg等这样。 - Estatistics
我的答案以“_”分隔,并按第二个字段排序。你的文件中没有“_”,所以它无法工作。要处理你的数据,请使用ls *.jpg| sort -n -t . -k 1或者只是ls *.jpg| sort -n - Puppe

26

你可以尝试使用-v选项来运行ls命令,该选项的作用是按照版本号对文件进行排序,但在这里同样适用,并且消除了将结果导入到sort的需要:

ls -lv data_*

19

如果您的sort需要版本排序,请尝试:

ls -1 | sort -V
(that's a capital V).

整洁高效,节省了我很多时间! - Luke

4

这是一个通用的答案!您需要将规则应用于特定的数据集。

ls | sort

例子:

ls | sort -n -t _ -k 2

我把它改成了-l,但是我没有按照那个顺序得到结果。 - Open the way
如果我尝试执行以下命令:ls -1 | sort -n我会得到以下结果:... data_89_box data_90_box ... data_99_box data_9_box (end)但是我希望它们按顺序排列。 - Open the way
好的,实际答案在Puppe的回答中,这只是一个提示,告诉你需要使用什么。 - Peter Lindqvist
我修改了我的答案以反映它是通用的。 - Peter Lindqvist

1

如果您的排序没有版本排序,以下是在bash中执行此操作的方法:

cat <your_former_ls_output_file> | awk ' BEGIN { FS="_" } { printf( "%03d\n",$2) }' | sort | awk ' { printf( "data_%d_box\n", $1)  }'

所有内容都在一行中。请记住,我没有在您的特定数据上进行测试,因此可能需要进行一些微调才能正确地为您工作。尽管如此,这概述了一个良好、强大且相对简单的解决方案。当然,您始终可以将开头的 cat+filename 替换为实际的 ls,以即时创建文件数据。要捕获实际的文件名列,您可以选择正确的 ls 参数或通过 cut 或 awk 进行管道传输。


1

也许你会喜欢SistemaNumeri.py(“固定数字”):它可以重命名你的

data_1_box
data_2_box
...
data_10_box
...
data_99_box

data_01_box
data_02_box
...
data_10_box
...
data_99_box

0
我能想到的一个建议是这样的:
for i in `seq 1 5`
do  
   cat "data_${i}_box"
done

0

我有一个文件夹里的文件,需要根据编号进行排序。例如 -

abc_dr-1.txt
hg_io-5.txt
kls_er_we-3.txt
sd-4.txt
sl_rt_we_yh-2.txt

我需要根据数字对它们进行排序。 所以我使用了这个进行排序。
ls -1 | sort -t '-' -nk2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接