我在 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
选项。