Extraiga una línea particular de los archivos de registro

Extraiga una línea particular de los archivos de registro

Tengo un archivo de registro como el siguiente,

 - 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

En el archivo de registro, en cada cuarta línea de UTT(n) hay una transcripción que quiero extraer usando el comando de Linux. Por ejemplo test_1978_recreatie_1657 we kunnen dat wel zeggen, test_1978_recreatie_1656 wij zullen <unk> antes estaba buscando el comando grep para la extracción de un patrón particular, pero no funcionó. Por favor sugiera cómo puedo hacerlo.

Respuesta1

Creo que lo que estás pidiendo es imprimir la cuarta línea después de cualquier aparición de UTT (n), restableciendo el contador a 1 cada vez que encuentres UTT (n):

awk '/UTT \([0-9]+\)/{line=0} {line++} line==4' file

Producción

test_1978_recreatie_1656 wij zullen <unk>
test_1978_recreatie_1657 we kunnen dat wel zeggen

Alguna explicación. awktiene líneas del formulario pattern {action}, donde patterno actionson opcionales (pero no ambos). Cada línea de entrada se aplica a todas las instrucciones de patrón/acción en secuencia. Un patrón faltante implica que la acción se ejecutará para cada línea de entrada. Una falta actionimplica que se imprimirá la línea de entrada.

/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

Respuesta2

Awk puede ser más sencillo que grep para algo como esto.

awk 'c && !--c; $2 == "UTT" {c=3}' file

Esto establece un contador cada vez que coincide una línea "UTT". Si el contador está configurado, disminuya la variable e imprima la línea si el contador vuelve a cero. Puede hacer coincidir líneas "UTT" de varias maneras, por ejemplo, una expresión regular /^ - UTT/ {c=3}o una coincidencia de cadena index($0, " - UTT") == 1 {c=3}. La condición $2 == "UTT"coincide cuando el segundo campo es la cadena "UTT".

Respuesta3

Usando awk:

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

En este comando, si UTTse encuentra, ase establece en NR+3. NR==aimprime la salida requerida.

información relacionada