我有一个文件,其中每 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 行:第二行不应处理如果与标题匹配则行。)