假设我有几个具有以下命名的文件:
000001
000002
000003
...
这些文件中的每一个都是一个csv
文件(可能包含转义字符)。该文件夹总共包含~20GB
数据。如何将这些文件拼接成一个最终文件?
如果重要的话我通常使用Zsh
.
答案1
cat <->.csv > all.csv
其中<->
匹配任何正整数十进制数,将把所有这些(按词法顺序,对于 0 填充数字与数字顺序相同)连接到all.csv
.
但这将使磁盘空间增加一倍。如果您不打算保留原始文件,您可以这样做:
for i in <->.csv; do
cat $i && rm -f $i || break
done > all.csv
答案2
如果您使用重定向,则会将内容追加或覆盖到一个文件。如果您想附加到一个文件,请使用:
cat file.csv file2.csv file3.csv >> all.csv
下一个命令将覆盖 all.csv:
cat file.csv file2.csv file3.csv > all.csv
但是假设您想要将所有 CSV 文件移动到给定目录中的一个 CSV 文件(附加到):
cat *.csv >> all.csv
答案3
为什么要将所有这些文件合并到一个文件中?
如果你想将它们提供给需要标准输入的程序,你可以这样做:
cat *.csv | prog
或前面提到的任何其他组合方法。
如果程序需要一个命名文件作为输入,请执行以下操作:
mkfifo p cat *.csv > p & prog p
如果您需要一个文件,因为一个文件更容易备份,那么将所有内容压缩在一起可能会很有用。如果您想读取文件而不解压它们,那么您可以将 tar 文件转换为基于 fusion 的文件系统。