特定の行を除くすべてのフィールドに awk コマンドを適用する方法

特定の行を除くすべてのフィールドに awk コマンドを適用する方法

156780 行ごとにヘッダー行があるファイルがあります。

ヘッダー行の 2 番目の列を除くすべての行の最初の列に 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最初の行は 0 ではなく 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 行を含む小さなファイルでテストすることもできます。2 行目は、ヘッダーと一致する場合、行を処理しません。)

関連情報