将 .csv 文件的第一行提取到一个新的 .csv 文件中

将 .csv 文件的第一行提取到一个新的 .csv 文件中

我在 Debian Squeeze 的文件夹中有超过 1000 个 .csv 文件。我正在尝试创建一个新的 .csv 文件,其中仅包含这 1000 个 .csv 文件中每个文件的第一行。

我试过:

read -r firstline < sourcefile_1.csv > headers.csv

但这只创建了一个空白文件。 (即使它确实有效,我也只会复制一个文件的第一行。)

如何编写一个命令来复制文件夹中所有 1000 个文件的前行并将其添加到新的 .csv 文件中?

提前致谢!

答案1

head -q -n 1 *.csv > output.csv
-q抑制通常打印的标题,-n 1仅打印第一行

答案2

假设 CSV 文件都包含标头,并且可能包含嵌入换行符的字段,我们不能只head在每个文件上运行(因为这可能会截断记录,而且这还包括每个文件的标头)。

而不是head使用 CSV 感知工具,例如磨坊主( mlr),将是一个更好的选择:

mlr --csv put -q 'FNR == 1 { emit $* }' *.csv

这将输出与文件名通配模式匹配的每个文件的第一个数据记录*.csv

例子:

$ cat file1
a,b
1,2
3,4
$ cat file2
a,b
5,6
7,8
$ cat file3
a,b
field one,"last
field
here"
$ mlr --csv put -q 'FNR == 1 { emit $* }' file[123]
a,b
1,2
5,6
field one,"last
field
here"

如果 CSV 文件是无标题的,请使用mlr-N选项。

相关内容