Cómo agregar una condición dentro de un bucle for durante la sustitución si la cadena es nula

Cómo agregar una condición dentro de un bucle for durante la sustitución si la cadena es nula

Estoy intentando agregar una condición en este código, que si hay una cadena nula en el archivo de traducción para cadena o repl[cadena], por ejemplo, mi archivo input_chk.txt tiene los siguientes detalles:

entrada_chk.txt

b73_chr10   w22_chr2
w22_chr7    w22_chr10
w22_chr8

Código:

#!/usr/bin/awk -f
# Collect the translations from the first file.
NR==FNR { repl[$1]=$2; next }

# Step through the input file, replacing as required.
{
if 
for ( string in repl ) {
if (length(string)==0)
{
    echo "error"
}
else
{
sub(string, repl[string])
}
}
#if string is null-character,then we have to add rules,
#if repl[string] is null-character,then we have to delete rules or put # in front of all lines until we reach </rules> also
# And print.
1

# to run this script as $ ./bash_script.sh input_chk.txt file.conf

archivo.conf

<rules>
<rule>
condition =between(b73_chr10,w22_chr1)
color = ylgn-9-seq-7
flow=continue
z=9
</rule>
<rule>
condition =between(w22_chr7,w22_chr2)
color = blue
flow=continue
z=10
</rule>
<rule>
condition =between(w22_chr8,w22_chr3)
color = vvdblue
flow=continue
z=11
</rule>
</rules>

Pero mi código muestra un error en la línea 8. Cómo incluir la condición para que pueda imprimir el error si falta una cadena en la primera o segunda columna.

Respuesta1

La ejecución del script muestra los problemas:

  • La línea 8 es un error de sintaxis, la palabra ifpor sí sola.
  • La línea 21 es un error de sintaxis, la palabra 1por sí sola.

Al comentarlos, hay algo que cuelga {en la línea 6. Quizás esto fue copiado de algún guión de trabajo, donde la interesante declaración de recopilación de registros en la línea 3 se procesa en la conclusión.

Corrija el script anteponiendo el {con END. Cambie la 1línea 21 a }.

Ahora (al menos) el script es sintácticamente correcto y no da errores. El resultado se ve así:

#!/usr/bin/awk -f
# Collect the translations from the first file.
NR==FNR { repl[$1]=$2; next }

# Step through the input file, replacing as required.
END {
#if 
for ( string in repl ) {
if (length(string)==0)
{
    echo "error"
}
else
{
sub(string, repl[string])
}
}
#if string is null-character,then we have to add rules,
#if repl[string] is null-character,then we have to delete rules or put # in front of all lines until we reach </rules> also
# And print.
}

# to run this script as $ ./bash_script.sh input_chk.txt file.conf

Sin embargo, no hace nada útil. Haciéndolo realidadesoSería al menos una pregunta más.

información relacionada