嗨,我有一个像这样的csv文件:
order,account,product
23023,Best Buy,productA
20342,Best Buy,productB
20392,Wal-Mart,productC
我正在使用前一个帖子的解决方案:
awk -F ',' '{ print > ("split-" $2 ".csv") }' dataset1.csv
但输出会生成2个没有标题的文件:
File1中
23023,Best Buy,productA
20342,Best Buy,productB
文件2
20392,Wal-Mart,productC
如何修改上面的awk解决方案以保留每个拆分文件中的标题行,以便输出类似于:
档案1
order,account,product
23023,Best Buy,productA
20342,Best Buy,productB
文件2
order,account,product
20392,Wal-Mart,productC
非常感谢!
答案 0 :(得分:1)
我会这样写:
awk -F, '
NR == 1 { header = $0; next}
!($2 in files) {
files[$2] = "split-" $2 ".csv"
print header > files[$2]
}
{ print > files[$2] }
' dataset1.csv
答案 1 :(得分:0)
您可以使用此awk脚本:
<强> script.awk 强>
NR == 1 { header = $0; next}
{ fname = "split-" $2 ".csv"
if( !( $2 in mem ) ) {
print header > fname
mem[ $2 ] = 1
}
print > fname
}
您可以像这样使用它:awk -F, -f script.awk dataset1.csv
<强>解释强>
header
header
写入fname
,但仅在第一次写入fname
$2
mem
来实现的
答案 2 :(得分:0)
另一个类似的awk
awk -F, 'NR==1 {h=$0; next}
{file="split-" $2 ".csv";
print (a[file]++?"":h ORS) $0 > file}' input
a[file]++
是由输出文件名索引的行计数器,仅在第一行之前插入附加ORS
的标题,这将成为每个拆分文件的标题。