3

我有一个小问题,希望能得到您的帮助。

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

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

但是,文件被无序合并。(文本文件编号为 1、2、3 等)

我正在使用*.txt,因为不同场景存在不同数量的文件。

你介意帮助我吗?

4

3 回答 3

4

如果您使用现代 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
于 2013-01-26T09:14:54.390 回答
0
paste -d, $(ls ~/Desktop/*.txt) > ~/Desktop/Out/merge.txt


* 被替换为按字母顺序排列的目录文件名列表。

3.5.8 文件名扩展

Bash 在每个单词中扫描字符“*”、“?”和“[”。如果出现这些字符之一,则该词被视为一个模式,并替换为按字母排序的与该模式匹配的文件名列表。

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

于 2013-01-26T09:21:16.460 回答
0

这是一个相当长的方法来做同样的事情,但在一条线上。

paste -d, $(ls ~/Desktop/*.txt | awk -F/ '{print $NF"/"$0}' | sort -n | cut -d/ -f2-) > ~/Desktop/merge.txt

我喜欢一个衬里:-)

于 2013-01-26T09:26:22.073 回答