いくつかの特定の行を除くすべてのフィールドに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行などの小さなファイルでテストすることもできます。ヘッダー行と一致します。)

関連情報