需要根据长度合并固定宽度文件的行

需要根据长度合并固定宽度文件的行

每行都以 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

相关内容