我正在使用
awk '/^E/ {a=substr($0,1,26);n=NR} NR==n+2 && n {print n,a,$0}' logfile
但我希望将{strong 1>}之后的日期或时间戳作为参数传递给shell脚本(想要获取始终以E
开头的行)。假设我将输入作为E
给下面的文件(按照下面的输入文件为2行),它应该从2014-04-03
开始获取行并匹配日期并显示该输出的所有条目日期
预期输出
E
inputfile如下所示
line number | E 2014-04-03 12:11:41.853 |location=PIN_ERR_FM:5 class=PIN_ERR_APPLICN:4 errno=PIN_ERR_VALUE:46
注意:从E 2014-04-03 12:11:41.853 abm310 cm:21.-142726944 functionalpurchase.c:1821 1:Isa-P
funcitional_aply_elmt eror
<location=PIN_ERR_FM:5 class=PIN_ERR_APPLICN:4 errno=PIN_ERR_VALUE:46
<field num=PIN__T:8,62 recid=0 reserved=0 reserved2=0 time(sec:usec)=1396548701:>
D 2014-04-03 12:11:41.853 abm310 cmf:2.-142726944 funtionalpurchase.c:1767 1:Isa-PC:
Now apply the good fee
<location=debugstate.c;class not found;errno=not found:01
E 2014-04-03 12:11:41.853 abm310 cm:21.-142726944 functionalpurchase.c:1821 1:Isa-P
<location=PIN_ERR_FM:5 class=PIN_ERR_APPLICN:4 errno=PIN_ERR_VALUE:47>
<field num=PIN__T:8,62 recid=0 reserved=0 reserved2=0 time(sec:usec)=1396548701:>
<facility=0 msg_id=85 version=1>
开始的行也将被提取,有时会在模式匹配后转到第2行或第3行或第4行。
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed -rn '/^E/{=;N;N;s/^(.{15}).*\n.*\n\s*/\1/p}' file | sed 'N;s/\n/ /'
这将打印所需行的行号,然后读取并追加接下来的两行并返回提取的字符串。输出通过管道连接到另一个sed,它将每两行减少到一行。
答案 1 :(得分:0)
这是你喜欢的吗?
awk '/^E/ {a=$0;n=NR} NR==n+2 && n {print n,a,$0}' file
1 E 45907:000:39 Error type, meant to find solution
这会打印以E
开头的行的行号,然后是行,然后是第二行。
更新为从触发线只获得7个字符。
awk'/ ^ E 20 [0-9] [0-9] / {d = $ 1 FS $ 2 FS $ 3; f = 1; n = NR} f&amp;&amp; / location / {$ 1 = $ 1; gsub(/ [&lt;&gt;] /,“”); print n,d,$ 0; f = 0}'OFS = \ | 1 | E 2014-04-03 12:11:41.853 | location = PIN_ERR_FM:5 | class = PIN_ERR_APPLICN:4 | errno = PIN_ERR_VALUE:46 10 | E 2014-04-03 12:11:41.853 | location = PIN_ERR_FM:5 | class = PIN_ERR_APPLICN:4 | errno = PIN_ERR_VALUE:47
从您的新数据我只会打印数据,如果行以E
开头(如果您愿意,可以是D
):
awk '/^E 20[0-9][0-9]/ {d=$1 FS $2 FS $3;f=1;n=NR} f && /location/ {$1=$1;gsub(/[<>]/,"");print n,d,$0;f=0}' OFS=\| file
1|E 2014-04-03 12:11:41.853|location=PIN_ERR_FM:5|class=PIN_ERR_APPLICN:4|errno=PIN_ERR_VALUE:46
10|E 2014-04-03 12:11:41.853|location=PIN_ERR_FM:5|class=PIN_ERR_APPLICN:4|errno=PIN_ERR_VALUE:47