次の行から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