以下のようなログファイルがあります。
- UTT (1): test_1978_recreatie_1656.wav
lattice-to-ctm-conf ark:- output/spk001_test_1978_recreatie_1656_1bestsym.ctm
online2-wav-nnet3-latgen-faster --online=false --do-endpointing=false --frame-subsampling-factor=3 --config=exp/tdnn1a_sp_bi_online/conf/online.conf --max-active=7000 --beam=15.0 --lattice-beam=6.0 --acoustic-scale=1.0 --word-symbol-table=exp/tdnn1a_sp_bi_online/graph_s/words.txt exp/tdnn1a_sp_bi_online/final.mdl exp/tdnn1a_sp_bi_online/graph_s/HCLG.fst 'ark:echo spk001 test_1978_recreatie_1656|' 'scp:echo test_1978_recreatie_1656 raw_data/spk001/test_1978_recreatie_1656.wav|' ark:-
test_1978_recreatie_1656 wij zullen <unk>
LOG (online2-wav-nnet3-latgen-faster[5.5.929~1-9bca2]:main():online2-wav-nnet3-latgen-faster.cc:296) Decoded utterance test_1978_recreatie_1656
LOG (lattice-to-ctm-conf[5.5.929~1-9bca2]:main():lattice-to-ctm-conf.cc:175) For utterance test_1978_recreatie_1656, Bayes Risk 4.06451, avg. confidence per-word 0.636305
- UTT (1): test_1978_recreatie_1656.wav, time: 1 seconds
- UTT (2): test_1978_recreatie_1657.wav
lattice-to-ctm-conf ark:- output/spk001_test_1978_recreatie_1657_1bestsym.ctm
online2-wav-nnet3-latgen-faster --online=false --do-endpointing=false --frame-subsampling-factor=3 --config=exp/tdnn1a_sp_bi_online/conf/online.conf --max-active=7000 --beam=15.0 --lattice-beam=6.0 --acoustic-scale=1.0 --word-symbol-table=exp/tdnn1a_sp_bi_online/graph_s/words.txt exp/tdnn1a_sp_bi_online/final.mdl exp/tdnn1a_sp_bi_online/graph_s/HCLG.fst 'ark:echo spk001 test_1978_recreatie_1657|' 'scp:echo test_1978_recreatie_1657 raw_data/spk001/test_1978_recreatie_1657.wav|' ark:-
test_1978_recreatie_1657 we kunnen dat wel zeggen
LOG (online2-wav-nnet3-latgen-faster[5.5.929~1-9bca2]:main():online2-wav-nnet3-latgen-faster.cc:296) Decoded utterance test_1978_recreatie_1657
LOG (lattice-to-ctm-conf[5.5.929~1-9bca2]:main():lattice-to-ctm-conf.cc:175) For utterance test_1978_recreatie_1657, Bayes Risk 0.654865, avg. confidence per-word 0.922916
- UTT (2): test_1978_recreatie_1657.wav, time: 0 seconds
ログ ファイルでは、UTT(n) から 4 行目ごとに転写があり、Linux コマンドを使用してこれを抽出したいと考えています。たとえばtest_1978_recreatie_1657 we kunnen dat wel zeggen
、test_1978_recreatie_1656 wij zullen <unk>
以前、特定のパターン抽出用の grep コマンドを探していましたが、うまくいきませんでした。どうすればいいか教えてください。
答え1
UTT (n)
あなたが求めているのは、 が出現するたびにカウンタを 1 にリセットして、の出現後に 4 行目を印刷することだと思いますUTT (n)
。
awk '/UTT \([0-9]+\)/{line=0} {line++} line==4' file
出力
test_1978_recreatie_1656 wij zullen <unk>
test_1978_recreatie_1657 we kunnen dat wel zeggen
説明。 にawk
は の形式の行がありpattern {action}
、pattern
または のいずれかaction
がオプションです (両方はオプションではありません)。入力の各行は、すべてのパターン/アクション命令に順番に適用されます。パターンがない場合は、アクションがすべての入力行に対して実行されることを意味します。 パターンがない場合は、action
入力行が印刷されることを意味します。
/UTT \([0-9]+\)/ {line=0} # Match the pattern to set line=0
{line++} # Each line of input increments line
line==4 # When line==4, implicitly print the line
答え2
このような場合には、awk の方が grep よりも簡単かもしれません。
awk 'c && !--c; $2 == "UTT" {c=3}' file
これは、「UTT」行が一致するたびにカウンターを設定します。カウンターが設定されている場合は、変数を減分し、カウンターがゼロに戻ったら行を出力します。「UTT」行は、正規表現/^ - UTT/ {c=3}
や文字列の一致など、さまざまな方法で一致させることができますindex($0, " - UTT") == 1 {c=3}
。条件$2 == "UTT"
は、2 番目のフィールドが文字列「UTT」である場合に一致します。
答え3
使用方法awk
:
awk '/UTT/{a=NR+3} NR==a' input
このコマンドでは、UTT
が見つかった場合、a
が に設定されますNR+3
。NR==a
必要な出力を印刷します。