按顺序对文件进行Bash和排序

时间:2009-11-17 06:53:42

标签: bash sorting

使用以前的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 个答案:

答案 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