길이에 따라 고정 너비 파일의 줄을 병합해야 함

길이에 따라 고정 너비 파일의 줄을 병합해야 함

각 줄은 FEPS로 시작됩니다. FEPS로 시작하지 않는 줄을 이전 줄에 병합한 다음 길이를 기준으로 파일을 정렬합니다. 즉, 길이가 23자인 줄을 유지합니다.

입력하다:

FEPS xxxx01 BUILDING 0 
FEPS xxxx02 BUILDING 
FEPS xxxx03 BUILDING 
0 
FEPS xxxx04 BUILDING 0 

산출:

FEPS xxxx01 BUILDING 0 
FEPS xxxx03 BUILDING 0 
FEPS xxxx04 BUILDING 0 

다음 스크립트를 사용하면 작동합니다.

awk 'BEGIN
    /FEPS/ {
        if (NR>1) print ""
        printf "%s", $0
        next
    } 
    {printf ",%s", $0} 
    END {print " "}'

위 스크립트의 출력은 다음으로 전달되어야 합니다.

awk 'length ==23 {print $0}'

답변1

$ cat tst.awk
$1 == "FEPS" { prt(); rec="" }
{ rec = rec $0 }
END { prt() }

function prt() { if (length(rec) == 23) print rec }

$ awk -v n=23 -f tst.awk file
FEPS xxxx01 BUILDING 0
FEPS xxxx03 BUILDING 0
FEPS xxxx04 BUILDING 0

답변2

이를 수행하기 위해 두 개의 awk 스크립트를 사용할 필요는 없습니다. 하나만 있으면 충분합니다.

awk 'length($0) == 23 { print ; next };
     /^FEPS/ { line=$0; next };
     {
       line = line $0;
       if (length(line) == 23) print line;
       line="";
     }
    ' input

샘플 입력을 다음 이름의 파일에 저장한 후 출력 input:

FEPS xxxx01 BUILDING 0
FEPS xxxx03 BUILDING 0
FEPS xxxx04 BUILDING 0

관련 정보