Bash脚本-通过向前看删除行

Bash脚本-通过向前看删除行,bash,unix,Bash,Unix,我有一个csv文件,其中有些行的第一个字段为空,有些行的第一个字段中有内容。第一个字段中包含内容的行是标题行 我想删除所有不必要的标题行。我能看到的最好的方法是删除每一行: 第一个字段不是空的 下一行中的第一个字段不是空的 我不一定需要将数据保存在同一个文件中,因此我可以看到使用grep、awk或sed可以做到这一点,但我的任何尝试都没有成功 输入示例: header1,value1,etc ,value2,etc header2,value3,etc header3,value4,etc ,v

我有一个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
    
    由于
    标题2
    行后面没有带空字段1的行,因此它是不必要的标题行

    awk -F, '$1{h=$0;next}h{print h;h=""}1' file
    
    -F,
    :使用逗号作为字段分隔符

    $1{h=$0;next}
    :如果第一个字段有数据(不是0),请保存该行并转到下一行

    h{print h;h=”“}1
    :如果有保存的标题行,请打印它并将其忘记。(由于上面的
    next
    ,只有在$1中没有任何内容时才能执行此操作。)

    1
    :打印当前行

    -F,
    :使用逗号作为字段分隔符

    $1{h=$0;next}
    :如果第一个字段有数据(不是0),请保存该行并转到下一行

    h{print h;h=”“}1
    :如果有保存的标题行,请打印它并将其忘记。(由于上面的
    next
    ,只有在$1中没有任何内容时才能执行此操作。)


    1
    :打印当前行。

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

    tac file |
      awk -F, '$1 && have_header {next} {print; have_header = length($1)}' |
      tac
    

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

    tac file |
      awk -F, '$1 && have_header {next} {print; have_header = length($1)}' |
      tac
    

    你能告诉我典型的一排是什么样子的吗?还有,你能告诉我“不必要的标题行”是什么意思吗?你能告诉我一个典型的行是什么样子的吗?你也能理解“不必要的标题行”是什么意思吗?