Bash脚本-通过向前看删除行
我有一个csv文件,其中有些行的第一个字段为空,有些行的第一个字段中有内容。第一个字段中包含内容的行是标题行 我想删除所有不必要的标题行。我能看到的最好的方法是删除每一行:Bash脚本-通过向前看删除行,bash,unix,Bash,Unix,我有一个csv文件,其中有些行的第一个字段为空,有些行的第一个字段中有内容。第一个字段中包含内容的行是标题行 我想删除所有不必要的标题行。我能看到的最好的方法是删除每一行: 第一个字段不是空的 下一行中的第一个字段不是空的 我不一定需要将数据保存在同一个文件中,因此我可以看到使用grep、awk或sed可以做到这一点,但我的任何尝试都没有成功 输入示例: header1,value1,etc ,value2,etc header2,value3,etc header3,value4,etc ,v
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
你能告诉我典型的一排是什么样子的吗?还有,你能告诉我“不必要的标题行”是什么意思吗?你能告诉我一个典型的行是什么样子的吗?你也能理解“不必要的标题行”是什么意思吗?