Unix 使用awk删除多个数字行

Unix 使用awk删除多个数字行,unix,awk,sed,ksh,Unix,Awk,Sed,Ksh,我需要从日志文件中删除一些行。该文件包含一些包含9位数字的行,有时是几行。我需要找到带有数字的连续行,并删除每个这样的组中除最后一行之外的每一行 408732560 Error descrNo payment information available 408976296 Error descrNo payment information available 413128144 416192730 375139814 Error descrNo payment information avail

我需要从日志文件中删除一些行。该文件包含一些包含9位数字的行,有时是几行。我需要找到带有数字的连续行,并删除每个这样的组中除最后一行之外的每一行

408732560
Error descrNo payment information available
408976296
Error descrNo payment information available
413128144
416192730
375139814
Error descrNo payment information available
经过处理后,我也需要它,如下所示:

408732560
Error descrNo payment information available
408976296
Error descrNo payment information available
375139814
Error descrNo payment information available
如果可能的话,我还想用如下文本行连接每个数字:

408732560 Error descrNo payment information available
408976296 Error descrNo payment information available
375139814 Error descrNo payment information available

下面是一个非常简单的方法:

$cat f
408732560
错误描述没有可用的付款信息
408976296
错误描述没有可用的付款信息
413128144
416192730
375139814
错误描述没有可用的付款信息
$cat f | awk'/^[0-9]{9}$/{v=$0}/^[0-9]{9}$/{print v”“$0;v=”“}END{if(v)print v}'
408732560错误说明无可用付款信息
408976296错误说明无可用付款信息
375139814错误说明无可用付款信息
本质上,如果我们遇到一个由9位数字组成的行,我们将该行存储在缓冲区中。当我们遇到一个非9位数的行时,我们打印缓冲区中的任何内容,然后清空它

sed -n 'h
$  {x
:cycle
   s/\(\n[0-9]* \)[^[:cntrl:]]*\1/\1/g
   t cycle
   s/.//p
   }' YourFile

将整个文件加载到缓冲区中,删除与下一行数字相同的任何行。循环此操作直到不再出现,打印结果(只需删除在第一个操作中添加的第一个\n)

这里是使用
awk
的一种方法:

$ awk '$1=="Error"{print e,$0;next}{e=$1}' file
408732560 Error descrNo payment information available
408976296 Error descrNo payment information available
375139814 Error descrNo payment information available

如果行以
Error开头,则如果未存储错误,则将其与存储的最后一个错误号一起打印。

解决方案是否需要使用awk,或者是否可以使用(通用)命令行实用程序?