如何對除少數特定行之外的所有欄位應用 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 行:第二行不應處理如果與標題相符則行。

相關內容