粘贴linux脚本

我有一个小问题,并会感谢您的帮助。

我需要使用粘贴命令将不同的文本文件合并在一起:

paste -d, ~/Desktop/*.txt > ~/Desktop/Out/merge.txt 

但是,这些文件是乱序合并的。 (文本文件编号为1,2,3等)

我正在使用*.txt因为不同情况下存在不同数量的文件。

请介意帮助我吧。

这是一个相当长的做法,但在一行。

 paste -d, $(ls ~/Desktop/*.txt | awk -F/ '{print $NF"/"$0}' | sort -n | cut -d/ -f2-) > ~/Desktop/merge.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扫描每个单词的字符'*','?'和'['。 如果出现这些字符中的一个,则该单词被认为是一个模式,并替换为与该模式匹配的按字母顺序排列的文件名列表。

所以文件传送不必是连续的;)