Как добавить условие в цикл for во время подстановки, если строка равна null

Как добавить условие в цикл for во время подстановки, если строка равна null

Я пытаюсь добавить условие в этот код, чтобы, например, если в файле перевода для string или repl[string] есть пустая строка, мой файл input_chk.txt имел следующие данные:

input_chk.txt

b73_chr10   w22_chr2
w22_chr7    w22_chr10
w22_chr8

Код :

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

файл.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>

Но мой код выдает ошибку в строке 8. Как включить условие, чтобы он мог вывести ошибку, если в первом или втором столбце отсутствует строка.

решение1

Запуск скрипта показывает проблемы:

  • Строка 8 — синтаксическая ошибка, ifсамо слово.
  • Строка 21 — синтаксическая ошибка, 1само слово.

Если их прокомментировать, то можно увидеть зависание {в строке 6. Возможно, это было скопировано из какого-то рабочего скрипта, где интересное выражение для сбора записей в строке 3 обрабатывается в конце.

Исправьте скрипт, добавив префикс {. ENDИзмените 1строку 21 на }.

Теперь (по крайней мере) скрипт синтаксически правильный и не выдает ошибок. Результат выглядит так:

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

Однако это не делает ничего полезного. Заставить это сделатьчтобыл бы как минимум еще один вопрос.

Связанный контент