在Bash中提供由数字文件名排序的文本文件

时间:2016-02-01 09:17:31

标签: linux bash file merge sequential

有没有办法用一个bash命令以文件名的数字顺序连接多个文本文件?

我试过这个,但由于某种原因,前三行不按顺序

sort -n *txt > all.txt

3 个答案:

答案 0 :(得分:3)

添加此答案,只是因为currently accepted answer建议a bad practice。 &安培;将来,Hellmar可能会遇到完全相同的问题I faced once.Cannot delete an accepted answer.

无论如何,这应该是安全的答案:

printf "%s\0" *txt | sort -zn | xargs -0 cat > all.txt

此处,整个管道的文件名由NULL字符分隔。 NULL字符只是不能成为文件名一部分的字符。

此外,如果所有文件名都具有相同的结构(例如file0001.txt,file0002.txt等),那么这段代码应该同样有效:

cat file[0-9][0-9][0-9][0-9].txt > all.txt

答案 1 :(得分:1)

ls *txt | sort -n | xargs cat > all.txt

这将获取所有文件名的列表并对其进行排序,然后使用xargs从cat和排序列表构建命令行。

答案 2 :(得分:1)

更新anishsane的答案。

printf "%s\0" *txt | sort -k1.thecharlocation -zn | xargs -0 cat > all.txt

thecharlocation是您要排序的第一个键。如果您的文件名为file01.txt,则thecharlocation5

另请参阅Nate在此question中的另一个类似答案。