Unix 使用awk删除多个数字行
我需要从日志文件中删除一些行。该文件包含一些包含9位数字的行,有时是几行。我需要找到带有数字的连续行,并删除每个这样的组中除最后一行之外的每一行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
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,或者是否可以使用(通用)命令行实用程序?