머리글, 전환 및 바닥글을 표시하는 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

관련 정보