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

gra*_*per 1 bash split sed

我想快速将csv文件拆分成N个大致相等的部分,并使每个部分都将原始标题作为第一行.到目前为止,我已经提出了这个,它有效(N = 5):

split -da 4 -l $((`wc -l < foo.csv`/5)) foo.csv foo --additional-suffix=".csv"
for f in `ls foo0*.csv`;do sed -i "1s/^/`head -n 1 foo.csv`\n/" $f; done;
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何把它变成一个单行,我通过拆分到for循环而不是运行ls命令来提供新创建的文件.

谢谢!

dog*_*ane 6

你根本不需要for循环.你可以这样做:

sed -i "1s/^/`head -n 1 foo.csv`\n/" foo0*.csv
Run Code Online (Sandbox Code Playgroud)

我不认为你可以通过提供新创建的文件,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
Run Code Online (Sandbox Code Playgroud)