다음 줄에서 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(/[][]/,"")
현재 줄에 있는 [
or ]
(문자 클래스: [ ]
두 문자로 ]
구성 [
되므로 )의 모든 항목을 대체 [ ][ ]
한 다음, 성공하면 첫 번째 필드(날짜), 두 번째 필드(날짜) 시간) 및 마지막 필드를 인쇄합니다 . (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