从这一行获取 2 条文本:
[23/08/2019 09:30:00 351] [DEBUG] [Hilo:Thread-17905] [Clase:co.com.colombiamovil.activator.db.PoolFacade: getSiebelDirectConnection (81)] [Conexi???n establecida 7682 siebelDB: TMAC70580369126846, duraci???n: 90]
输出:
23/08/2019 09:30:00 | duraci???n: 90
或者
23/08/2019 09:30:00 | 90
这样我就得到了持续时间:
grep "duraci???n: " ussdGw.log | cut -d" " -f16 | tr -d "]"
但我查不出日期
帮我
答案1
你可以用awk
这个:
$ awk 'gsub(/[][]/,""){print $1,$2,"|",$NF}' file
23/08/2019 09:30:00 | 90
将gsub(/[][]/,"")
替换当前行上出现的所有[
或]
(这是一个字符类:[ ]
由两个字符]
和组成[
,因此变为[ ][ ]
),然后,如果成功,则打印第一个字段(日期)、第二个字段(日期)时间)和最后一个(NF)字段,持续时间。
答案2
我猜你想解析一个包含很多行的日志文件?利用子串操作:
$ cat get2texts.sh
:
#!/bin/bash
logfile="$1"
IFS=']'
while read -r one two three four five junk; do
one="${one#[}"
one="${one% *}"
five="${five/*,/ | }"
echo "$one $five"
done < "$logfile" \
| tr -s ' ' ' '
结果:
$ get2texts.sh testfile
23/08/2019 09:30:00 | duraci???n: 90
答案3
如果你明智地设置 FS,你可能会逃脱,例如:
awk '{ print $2, $3, "| " $(NF-1) }' FS='[] []+' infile
输出:
23/08/2019 09:30:00 | 90
答案4
awk '{print $1,$2,$NF}' filename| sed "s/\[//g"|sed "s/\]//g"| awk '{$NF=" | "$NF;print $0}'
输出
23/08/2019 09:30:00 | 90