ヘッダー、トランジション、フッターを表示するAWKコマンド?

ヘッダー、トランジション、フッターを表示するAWKコマンド?

私は次のコマンドを使用しました。

awk 'BEGIN{print "Header"};{FIELDWIDTHS ="3 4 3"}{print $1"|"$2"|"$3"
|"};END{print "Footer"}' file8

実際 -

Header
1234567890|||
234|5678|901|
345|6789|012|
098|7654|321|
Footer

予想する -

Header
123|4567|890|
234|5678|901|
345|6789|012|
098|7654|321|
Footer

答え1

{FIELDWIDTHS ="3 4 3"}最初の行を読み取って解析した後にのみ操作が適用されるため、最初の行にエラーが発生します。

FIELDWIDTHSブロック内に定義を移動すると、期待BEGINどおりに機能します。

awk 'BEGIN{print "Header"; FIELDWIDTHS ="3 4 3"}{print $1"|"$2"|"$3"|"};END{print "Footer"}' file8

これはFIELDWIDTHSGNU Awk()でのみサポートできますgawk

答え2

これは次のコマンドで達成され、うまく機能します。

注文する:

awk 'NR==1{$0=substr($1,1,3)"|"substr($1,4,3)"|"substr($1,6,3)"|"}1'    filename

出力

 awk 'NR==1{$0=substr($1,1,3)"|"substr($1,4,3)"|"substr($1,6,3)"|"}1' l.txt 
123|456|678|
234|5678|901|
345|6789|012|
098|7654|321|
Footer

関連情報