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. awk
tiene líneas del formulario pattern {action}
, donde pattern
o action
son 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 action
implica 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 UTT
se encuentra, a
se establece en NR+3
. NR==a
imprime la salida requerida.