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
if
allein. - Zeile 21 ist ein Syntaxfehler, das Wort
1
allein.
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 1
in 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.