文字列が null の場合に置換中に for ループ内に条件を追加する方法

文字列が null の場合に置換中に for ループ内に条件を追加する方法

このコードに条件を追加しようとしています。たとえば、翻訳ファイルに文字列またはrepl[string]のいずれかのnull文字列がある場合、ファイルinput_chk.txtには次の詳細が含まれます。

入力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 行目にエラーを表示しています。最初の列または 2 番目の列のいずれかに文字列が欠落している場合にエラーを印刷できるように条件を含める方法を教えてください。

答え1

スクリプトを実行すると、問題が表示されます。

  • 8 行目は、単語if自体が構文エラーです。
  • 21 行目は、単語1自体が構文エラーです。

これらをコメント アウトすると、6 行目にぶら下がった部分があります。{おそらくこれは、3 行目の興味深いレコード収集ステートメントが終了時に処理される、何らかの作業スクリプトからコピーされたものです。

{の前に を付けてスクリプトを修正しますEND。211行目の を に変更します}

これで (少なくとも) スクリプトは構文的に正しくなり、エラーも発生しなくなりました。結果は次のようになります。

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

しかし、それは何も役に立ちません。それ少なくとももう1つの質問があります。

関連情報