我有一个小问题,希望能得到您的帮助。
我需要使用粘贴命令将不同的文本文件合并在一起:
paste -d, ~/Desktop/*.txt > ~/Desktop/Out/merge.txt
但是,文件被无序合并。(文本文件编号为 1、2、3 等)
我正在使用*.txt
,因为不同场景存在不同数量的文件。
你介意帮助我吗?
如果您使用现代 bash,您可以编写:
paste -d, ~/Desktop/{1..10}.txt > ~/Desktop/Out/merge.txt
如果没有,你必须使用类似的东西:
paste -d, $(seq 1 10 | sed 's@.*@~/Desktop/&.txt) > ~/Desktop/Out/merge.txt
如果您不知道目录中有哪些文件,可以列出并排序它们:
cd ~/Desktop/
paste -d, $(ls -1d *.txt| sort -n) > ~/Desktop/Out/merge.txt
例子:
$ touch {1..20}.txt
$ echo $(ls -1 | sort -n)
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt 13.txt 14.txt 15.txt 16.txt 17.txt 18.txt 19.txt 20.txt
示例 2:
$ echo hello > 1.txt
$ echo dear > 5.txt
$ echo friend > 11.txt
$ paste -d, $(ls -1d *.txt| sort -n)
hello,dear,friend
paste -d, $(ls ~/Desktop/*.txt) > ~/Desktop/Out/merge.txt
* 被替换为按字母顺序排列的目录文件名列表。
3.5.8 文件名扩展
Bash 在每个单词中扫描字符“*”、“?”和“[”。如果出现这些字符之一,则该词被视为一个模式,并替换为按字母排序的与该模式匹配的文件名列表。
所以文件名不必是连续的;)
这是一个相当长的方法来做同样的事情,但在一条线上。
paste -d, $(ls ~/Desktop/*.txt | awk -F/ '{print $NF"/"$0}' | sort -n | cut -d/ -f2-) > ~/Desktop/merge.txt
我喜欢一个衬里:-)