使用以前的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完成吗?
答案 0 :(得分:59)
ls data_* | sort -n -t _ -k 2
-n:按数字排序
-t:字段分隔符'_'
-k:在第二个字段上排序,在您的情况下是第一个'_'
答案 1 :(得分:20)
如何将-v
标记用于ls
?该标志的目的是根据版本号对文件进行排序,但它在这里也可以正常工作,并且无需将结果传递给sort
:
ls -lv data_*
答案 2 :(得分:8)
如果您的sort
有版本排序,请尝试:
ls -1 | sort -V
(这是大写字母V)。
答案 3 :(得分:2)
这是一个通用的答案!您必须将规则应用于特定数据集
ls | sort
示例:
ls | sort -n -t _ -k 2
答案 4 :(得分: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进行管道输送。
答案 5 :(得分: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
答案 6 :(得分: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
答案 7 :(得分:-1)
我能想到的一个建议是:
for i in `seq 1 5`
do
cat "data_${i}_box"
done