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