我有一个csv文件,其中某些行的第一个字段为空,而某些行的第一个字段中包含内容。第一个字段中包含内容的行是标题行。
我想删除每个不必要的标题行。我能看到的最好的方法是删除每一行:
我不一定需要将数据保存在同一个文件中,所以我可以看到使用grep,awk或sed这是可能的,但我的尝试都没有接近工作。
示例输入:
header1,value1,etc
,value2,etc
header2,value3,etc
header3,value4,etc
,value5,etc
期望的输出:
header1,value1,etc
,value2,etc
header3,value4,etc
,value5,etc
由于header2
行后面没有空字段1的行,因此它是一个不必要的标题行。
答案 0 :(得分:4)
awk -F, '$1{h=$0;next}h{print h;h=""}1' file
-F,
:使用逗号作为字段分隔符
$1{h=$0;next}
:如果第一个字段有数据(非0),请保存该行并继续下一行。
h{print h;h=""}1
:如果有保存的标题行,请将其打印并忘记。 (这只能在$ 1中因为上面的next
没有任何内容时执行。)
1
:打印当前行。
答案 1 :(得分:0)
通过反转文件并检查上一个行是否为标题,这些任务在概念上通常更容易:
tac file |
awk -F, '$1 && have_header {next} {print; have_header = length($1)}' |
tac