【发布时间】:2015-11-01 17:54:41
【问题描述】:
完整文件.csv:
animal,number
rabbit,1
fish,2
mouse,1
dog,1
lizard,2
cat,2
我想在第二列的值上拆分文件, 并使用了这个命令:
awk 'BEGIN {FS = ","}; {print > ("file"$2".csv")}' fullfile.csv
输出:
file1.csv
rabbit,1
mouse,1
dog,1
file2.csv
fish,2
lizard,2
cat,2
但是 file1.csv 或 file2.csv 中没有标题,所以我尝试像这样添加它:
awk 'BEGIN {FS = ","}; NR==1 { print } {print > ("file"$2".csv")}' fullfile.csv
但标题打印到命令行而不是转到每个文件。如何让标题包含在每个文件中?
【问题讨论】:
-
我个人的偏好是不要在第一行使用 awk,而对两个文件都以
head -1开头。但是我很确定如果您引入if并使用两个打印语句打印到这两个文件,您可以使用 awk 来做到这一点。但是,如果文件的数量不是固定的并且由文件的第二列的内容决定,则需要一些创造力......然后为它编写 perl 或 bash 脚本可能会更容易...... -
感谢您的输入。它不必在 awk 中。我考虑过使用 awk 行,然后使用 sed 将第一个标题添加到每个文件:sed -i - e 'header line' file.csv ......但这需要复制和粘贴标题行并在每次我需要运行它时将其替换到脚本中......希望有一种更简单、更不容易出错的方法。跨度>