有没有办法用一个bash命令按文件名的数字顺序连接多个文本文件?
我试过这个,但是由于某种原因,前三行不合适
sort -n *txt > all.txt
添加这个答案,只是因为目前接受的答案表明一个不好的做法 。 未来,Hellmar可能会遇到同样的问题, 我面临过一次。 : 无法删除接受的答案。
无论如何,这应该是安全的答案:
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
ls *txt | sort -n | xargs cat > all.txt
这将获得所有文件名的列表并对其进行排序,然后使用xargs从cat
和排序列表构建命令行。
更新anishsane的答案。
printf "%s\0" *txt | sort -k1.thecharlocation -zn | xargs -0 cat > all.txt
thecharlocation
是您要排序的第一个键。 如果您的文件名是file01.txt
,则thecharlocation
为5
。
在这个问题上参见Nate的另一个类似的答案。