如何按行拆分 CSV 文件,同时保留两个输出文件中的标题?

kum*_*mar 3 linux shell shell-script csv

我正在尝试通过以下命令拆分 csv 文件-sample.csv。

split -n 2 -a 1 -d sample.csv test_
Run Code Online (Sandbox Code Playgroud)

我得到两个大小相等的文件,一个带有标题,另一个没有标题,并且末尾的行被修剪掉。

当我看到下面的脚本时,结果显示在终端上,但没有生成文件。

split -n 1/2 -a 1 -d sample.csv test_
Run Code Online (Sandbox Code Playgroud)

bxm*_*bxm 7

看起来这两个命令都按照设计的那样工作。

\n

第一个分割是按字节进行的,当你分割一个大的二进制对象时,它不会考虑行 \xe2\x80\x94 ,而当它是像 CSV 这样的东西时,就不那么有用了。

\n

第二个看起来像是对文档的误读(但在技术上仍然有效)。

\n

我认为你的意思是这样做:

\n
split -n l/2 -a 1 -d sample.csv test_\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,这lower case L slash two并不one slash two像您看起来所做的那样。

\n

您不会在第二部分看到标题行,因为split它并不真正了解内容。

\n

一种方法是做这样的事情

\n
# extract header row and save\nhead -n1 sample.csv > header\n# skip header row and split records to temporary files\ntail -n+2 sample.csv | split -n l/2 -a 1 -d temp_\n# make final files from header and split records\nfor f in temp_? ; do\n  cat header "$f" > "${f/temp/test}"\n  # clean up temporary file\n  rm "$f"\ndone\n# clean up header file\nrm header\n
Run Code Online (Sandbox Code Playgroud)\n