이 줄에서 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(/[][]/,"")현재 줄에 있는 [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

관련 정보