如何对除少数特定行之外的所有字段应用 awk 命令

如何对除少数特定行之外的所有字段应用 awk 命令

我有一个文件,其中每 156780 行有一个标题行。

我想将 awk 命令应用于除标题行的第二列之外的每一行的第一列。

或者至少标题行应该不受影响。

谁能帮我做到这一点。

我使用了 awk 命令,如下所示

awk 'NR>2 {printf("%10i %15.8E\n",$1,$2);}' fort.74 > fort.75

答案1

标题行将满足条件NR % 156780 == 0。这意味着您可以使用

awk 'NR % 156780 != 0 { process non-header row }' ...

...或者可能

awk '(NR - 1) % 156780 != 0 { process non-header row }' ...

NR第一行为 1,而不是零)

如果您想不受影响地通过标题行:

awk '(NR - 1) % 156780 != 0 { process non-header row } (NR - 1) % 156780 == 0 { print }' ...

也就是说,只需print为非标题行所用操作的逆条件添加一个单独的操作即可。

答案2

简单的怎么样:

awk '(NR==1)          { header=$0; rem="we retrieve the header content";}
     ( $0 != header ) { process non header lines here ... }'

(您可以选择在第一行中添加“; next”,但如果没有,它也允许您在小文件上进行测试,例如原始文件的前 5 行:第二行不应处理如果与标题匹配则行。)

相关内容