从这一行获取 2 条文本

从这一行获取 2 条文本

从这一行获取 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

相关内容