如何使用 awk 仅处理某些列并忽略分隔文本文件中的页眉和页脚?

如何使用 awk 仅处理某些列并忽略分隔文本文件中的页眉和页脚?

我有一个名为的输入文本文件text.txt

Header
Column1|Column2|Column3
C11|C12|C13
C21|C22|C23
C31|C32|C33
Footer

我的输出应该是:

Column1|Column3
C11|C13
C21|C23
C31|C33

我当前使用的命令是

awk -F "|" 'BEGIN{NR > 1; OFS = "|"}{print $1, $3}' text.txt > text2.txt

为什么不让NR > 1Header 被忽略,因为它是第一行?

此外,我如何忽略最后一行?

答案1

awk -F '|' -vOFS='|' '/^Header|^Footer/ {next} ; {print $1, $3}' text.txt

这会跳过匹配^Header或 的行^Footer,并打印所有其他行的第 1 列和第 3 列。

字段分隔符 (FS) 和输出字段分隔符 (OFS) 均设置为|

答案2

也许你可以使用这样的东西(a.txt包含输入):

 head --lines=-1 a.txt | tail --lines=+2 | awk -F "|" '{print $1"|"$2}'

head --lines=-1打印除最后一行以外的所有内容
tail --lines=+2打印所有内容但从第二行开始
awk -F "|" '{print $1"|"$3}'获取第一列和第三列

结果是:

Column1|Column3
C11|C13
C21|C23
C31|C33

相关内容