Shell 在Linux中,如果我有一堆文本文件,是否有一个简单的脚本将它们合并到一个文件中?

Shell 在Linux中,如果我有一堆文本文件,是否有一个简单的脚本将它们合并到一个文件中?,shell,Shell,例如,假设我有1.csv,2.csv,20.csv。是否有一个简单的shell脚本可以将所有内容合并到merged.csv中?使用cat将它们连接起来 cat *.csv > merged.csv 正如@sarnold所指出的,这将无序地连接它们。如果这很重要,请使用他的for循环建议或以下xargs管道: ls *.csv | sort -n | xargs cat > merged.csv 答案很简单: cat *.csv > merged.csv 将排序1.csv

例如,假设我有1.csv,2.csv,20.csv。是否有一个简单的shell脚本可以将所有内容合并到merged.csv中?

使用cat将它们连接起来

cat *.csv > merged.csv
正如@sarnold所指出的,这将无序地连接它们。如果这很重要,请使用他的for循环建议或以下xargs管道:

ls *.csv | sort -n | xargs cat > merged.csv
答案很简单:

cat *.csv > merged.csv
将排序
1.csv 10.csv 2.csv 20.csv 3.csv…
。如果要按数字排序,则需要做更多的工作:

for i in `seq 1 20`; do cat ${i}.csv >> merged.csv ; done

如果您希望通过将一行附加到另一行的末尾来合并文件,那么您需要的是
粘贴

例如,如果文件1包含:

1,One
2,Two
A,B,C
D,E,F
文件2包含:

1,One
2,Two
A,B,C
D,E,F
您可以运行
paste-d,file1 file2
来获得以下内容:

1,One,A,B,C
2,Two,D,E,F

cat{1..20}.csv>merged.csv


这就是猫的用途!请注意,我在
{1..20}
序列中使用了bash ism。

最后一个有用的用法是
cat
!请注意,对于用户给定的特定情况,这可能会导致行为不当:
1.csv
后面跟着
10.csv
。也许它对@deltanovember并不重要,也许它确实重要。如果重要的话,可以单独指定每个文件名。顺序取决于shell如何展开
*.csv
。使用Zsh,您可以运行
setopt NUMERIC\u GLOB\u SORT
,然后
*.csv
将扩展到
1.csv 2.csv。。。10.csv。。。20.csv
。这是一个很好的小实用程序,也是一个很好的提醒:许多问题可能有多种解释: