Извлечь определенную строку из файлов журнала

Извлечь определенную строку из файлов журнала

У меня есть файл журнала, как показано ниже:

 - 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

В файле журнала, в каждой 4-й строке из UTT(n) есть транскрипция, которую я хочу извлечь с помощью команды Linux. Например test_1978_recreatie_1657 we kunnen dat wel zeggenи test_1978_recreatie_1656 wij zullen <unk> Ранее я искал команду grep для извлечения определенного шаблона, но это не сработало. Пожалуйста, подскажите, как мне это сделать.

решение1

Я думаю, что вы просите вывести четвертую строку после любого появления UTT (n), сбрасывая счетчик на 1 каждый раз, когда вы сталкиваетесь с 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"выполняется, когда второе поле является строкой "UTT".

решение3

С использованием awk:

awk '/UTT/{a=NR+3} NR==a' input

В этой команде, если UTTнайдено, то aустанавливается значение NR+3. NR==aвыводит требуемый вывод.

Связанный контент