fullfile.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
但是标题打印到命令行而不是转到每个文件。如何将标题包含在每个文件中?
答案 0 :(得分:4)
您还可以使用awk
在awk -F","
脚本之外指定字段分隔符。
您可以在NR==1
时将标头存储为变量。将文件编号存储在一个数组中,如果该编号尚未在数组中,则只写入一次标题。一旦值在数组中,您只需在以前设置它们时将行写入各自的文件:
awk -F"," 'NR==1{header=$0}NR>1&&!a[$2]++{print header > ("file"$2".csv")}NR>1{print > ("file"$2".csv")}' fullfile.csv
输出:
file1.csv
animal,number
rabbit,1
mouse,1
dog,1
file2.csv
animal,number
fish,2
lizard,2
cat,2
答案 1 :(得分:0)
这是一个更简单的awk命令,具有更好的格式。
awk -F, '
NR==1 {hdr=$0; next}
{fn="file" $2 ".csv"}
!seen[$2]++{print hdr > fn}
{print > fn}' fullfile.csv
样本输出
$ for i in file*.csv; do echo $i; cat $i; echo; done
file1.csv
animal,number
rabbit,1
mouse,1
dog,1
file2.csv
animal,number
fish,2
lizard,2
cat,2