長さに応じて固定幅ファイルの行をマージする必要があります

長さに応じて固定幅ファイルの行をマージする必要があります

各行は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

これを行うために2つのawkスクリプトを使用する必要はありません。 1つだけで十分です。

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

関連情報