So fügen Sie während der Ersetzung eine Bedingung innerhalb einer For-Schleife hinzu, wenn die Zeichenfolge null ist

So fügen Sie während der Ersetzung eine Bedingung innerhalb einer For-Schleife hinzu, wenn die Zeichenfolge null ist

Ich versuche, in diesen Code eine Bedingung einzufügen, dass, wenn in der Übersetzungsdatei beispielsweise für „string“ oder „repl[string]“ eine Nullzeichenfolge vorhanden ist, meine Datei input_chk.txt die folgenden Details enthält:

input_chk.txt

b73_chr10   w22_chr2
w22_chr7    w22_chr10
w22_chr8

Code:

#!/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

datei.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>

Aber mein Code zeigt in Zeile 8 einen Fehler an. Wie schließe ich die Bedingung ein, sodass ein Fehler gedruckt werden kann, wenn in der ersten oder zweiten Spalte eine Zeichenfolge fehlt?

Antwort1

Beim Ausführen des Skripts werden die Probleme angezeigt:

  • Zeile 8 ist ein Syntaxfehler, das Wort ifallein.
  • Zeile 21 ist ein Syntaxfehler, das Wort 1allein.

Wenn diese auskommentiert werden, bleibt {in Zeile 6 ein String hängen. Vielleicht wurde dieser aus einem funktionierenden Skript kopiert, in dem die interessante Anweisung zur Datensatzerfassung in Zeile 3 am Ende verarbeitet wird.

Korrigieren Sie das Skript, indem Sie {dem ein Präfix voranstellen END. Ändern Sie 1in Zeile 21 ein in ein }.

Jetzt ist das Skript zumindest syntaktisch korrekt und gibt keine Fehler aus. Das Ergebnis sieht folgendermaßen aus:

#!/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

Es tut jedoch nichts Nützliches. Es zu tunDaswäre zumindest noch eine Frage.

verwandte Informationen