この行から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 ](文字クラス:[ ]2文字で構成されて]いる[ため)のすべての項目を置き換え[ ][ ]てから、成功した場合は最初のフィールド(日付)、2番目のフィールド(日付)時間)、および最後のフィールドを印刷します。 (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

関連情報