Shell Unix脚本,用于在awk脚本中添加标头,从而每隔一行生成一个标头

Shell Unix脚本,用于在awk脚本中添加标头,从而每隔一行生成一个标头,shell,unix,awk,Shell,Unix,Awk,我正在尝试向拆分文件添加标题,但使用此代码,标题每隔一行显示一次: awk -F, '{print "eid,devicetype,meterid,lat,lng" > $7"-"$6".csv"}{print $1",", $2",", $3",", $4",", $5"," >> $7"-"$6".csv"}' path/filename awk代码本身可以工作,但我需要在文件中应用一个头。脚本根据第6列和第7列中的值拆分文件,并使用这些值命名结束文件。然后删除第6列和第

我正在尝试向拆分文件添加标题,但使用此代码,标题每隔一行显示一次:

awk -F, '{print "eid,devicetype,meterid,lat,lng" > $7"-"$6".csv"}{print $1",", $2",", $3",", $4",", $5"," >> $7"-"$6".csv"}' path/filename
awk代码本身可以工作,但我需要在文件中应用一个头。脚本根据第6列和第7列中的值拆分文件,并使用这些值命名结束文件。然后删除第6列和第7列,只在输出文件中放入第1-5列。这是在Unix上从PowerCenter运行的shell脚本。 我相信对于其他更有经验的人来说,这可能是一个简单的解决方案。

您可以使用:

awk -F, '!a[$7,$6]++{print "eid,devicetype,meterid,lat,lng" > $7 "-" $6 ".csv"}
  {print $1,$2,$3,$4,$5 > $7 "-" $6 ".csv"}' OFS=, /path/filename.csv

NR==1
将确保打印第一条记录的标题。

它适用于一个文件,但有时导出为多个文件。我需要它为所有输出文件添加一个标题。你能帮忙吗?在我的输出文件中,每个逗号后面都有一个空格。我需要什么来删除这些空格?要在输出中使用逗号而不是空格,请使用
awk-v OFS=,…
此外,如果您在问题中提供了示例输入文件,我可以查看其不起作用的原因。
!a[$7,$6]+
而不是
NR==1
,因为模式可能会满足他的需求。每个唯一的
$7
/
$6
组合都有一个标题。对,您需要在
右侧插入字符串连接,它应该是
而不是第二行的
>
(虽然在本例中,从功能上来说,它并不重要)。the!一个[$7,$6]++用于将头添加到每个文件中。非常感谢。-v OFS=,不适用于逗号。空格是我将列放入新文件的方式:$1“,”,$2“,“,$3“,”,$4“,“,$5”,“但结果显示为:column1,column2,column3,column4,column5,正如我希望它们显示为column1,column2,column3,column4,column5那样
只擦除一次文件,而不是每次?对,awk中
>
的语义与shell不同。
awk '
BEGIN { FS=OFS="," }
{ fname = $7 "-" $6 ".csv" }
!seen[fname]++ { print "eid", "devicetype", "meterid", "lat, "lng" > fname}
{ print $1, $2, $3, $4, $5 > fname }
' path/filename