bash - Bash脚本 - 通过向前看删除线条

bash - Bash脚本 - 通过向前看删除线条,第1张

我有一个csv文件,其中某些行的第一个字段为空,而某些行的第一个字段中包含内容。第一个字段中包含内容的行是标题行。

我想删除每个不必要的标题行。我能看到的最好的方法是删除每一行:

  1. 第一个字段不为空
  2. 以下行中的第一个字段不为空
  3. 我不一定需要将数据保存在同一个文件中,所以我可以看到使用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的行,因此它是一个不必要的标题行。

    最佳答案:

    2 个答案:

    答案 0 :(得分:4)

    awk -F, '{h=-F,;next}h{print h;h=""}1' file
    

    {h=h{print h;h=""}1;next}:使用逗号作为字段分隔符

    next:如果第一个字段有数据(非0),请保存该行并继续下一行。

    1:如果有保存的标题行,请将其打印并忘记。 (这只能在$ 1中因为上面的上一个没有任何内容时执行。)

    tac file | awk -F, ' && have_header {next} {print; have_header = length()}' | tac :打印当前行。

    答案 1 :(得分:0)

    通过反转文件并检查行是否为标题,这些任务在概念上通常更容易:

    本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复