Bash 将csv文件拆分为多个部分,复制标题

Bash 将csv文件拆分为多个部分,复制标题,bash,sed,split,Bash,Sed,Split,我想要一种快速的方法将csv文件分成N个大致相等的部分,并使每个部分都有原始的头作为第一行。 到目前为止,我已经提出了一个有效的方法(N=5): split-da 4-l$(`wc-l

我想要一种快速的方法将csv文件分成N个大致相等的部分,并使每个部分都有原始的头作为第一行。 到目前为止,我已经提出了一个有效的方法(N=5):

split-da 4-l$(`wc-l
有没有人知道如何将其转换为一行程序,通过将新创建的文件拆分到for循环中而不是运行ls命令来提供这些文件


谢谢

您根本不需要for循环。您可以简单地执行以下操作:

sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv
我不认为您可以通过
sed
来提供新创建的文件,因为
split
不会提供新的文件名

如果您确实需要一行程序,可以使用
&&
将这两条语句连接起来:

split -da 4 -l $((`wc -l < foo.csv`/5)) foo.csv foo --additional-suffix=".csv" && sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv
split-da 4-l$(`wc-l
您根本不需要for循环。您可以简单地执行以下操作:

sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv
我不认为您可以通过
sed
来提供新创建的文件,因为
split
不会提供新的文件名

如果您确实需要一行程序,可以使用
&&
将这两条语句连接起来:

split -da 4 -l $((`wc -l < foo.csv`/5)) foo.csv foo --additional-suffix=".csv" && sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv
split-da 4-l$(`wc-l
不完全是一行,但它确保头不在任何拆分文件中,然后将其添加到所有文件中

f=foo.csv
header=$(sed 1q "$f")
split -da 4 -l $(( ($(wc -l < "$f")-1) / 5 )) <(sed 1d "$f") foo --additional-suffix=".csv"
sed -i "1i\\$header" foo0*.csv
f=foo.csv
页眉=$(sed 1q“$f”)

split-da 4-l$(($(wc-l<“$f”)-1)/5))不完全是一行,但它确保头不在任何分割文件中,然后将其添加到所有文件中

f=foo.csv
header=$(sed 1q "$f")
split -da 4 -l $(( ($(wc -l < "$f")-1) / 5 )) <(sed 1d "$f") foo --additional-suffix=".csv"
sed -i "1i\\$header" foo0*.csv
f=foo.csv
页眉=$(sed 1q“$f”)

split-da 4-l$(($(wc-l<“$f”)-1)/5))对,我不应该将头添加到foo0000.txt两次,这是原始代码正在做的。对,我不应该将头添加到foo0000.txt两次,这是原始代码正在做的。