Shell 在Linux中,如果我有一堆文本文件,是否有一个简单的脚本将它们合并到一个文件中?
例如,假设我有1.csv,2.csv,20.csv。是否有一个简单的shell脚本可以将所有内容合并到merged.csv中?使用cat将它们连接起来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
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
。这是一个很好的小实用程序,也是一个很好的提醒:许多问题可能有多种解释: