AWK は方程式に変数を使用します。

AWK は方程式に変数を使用します。

私のコードの単純化されたバージョンは次のとおりです。

declare -a DMN=(" " "200" "190" "180")
NRL=3

runDHFiles()
{
awk 'NR>13 {if ($4==$DMN[$i]) print $1, $2, $3, $4;}' domain_all.dat >> ddh_domain_${DMN[$i]}.dat
}

for ((i = 1; i <= NRL; i++ )); do
   runDHFiles
done

大量のExcelファイルを繰り返しながら、フィールドフラグ(列4)が特定の数字と同じ行をコピーしようとします。

これはうまくいきます。

if ($4==200)

これはうまくいきません。

if ($4==$DMN[$i])

ループ内の等しい文の配列値にどのようにアクセスしますか?

ありがとう、

レイプ

ベストアンサー1

1つのオプションは、シェル変数をに渡してawk再参照するのを防ぐことです。

awk 'NR>13 {if ($4==dmn) print $1, $2, $3, $4;}' dmn="${DMN[$i]}" domain_all.dat >> ddh_domain_${DMN[$i]}.dat

私もシェル関数に変数を渡すためにシェルスクリプトをリファクタリングする傾向があります。

declare -a DMN=(" " "200" "190" "180")
NRL=3

runDHFiles()
{
    local dmn="$1"
    awk 'NR>13 && $4==dmn {print $1, $2, $3, $4;}' dmn="$dmn" domain_all.dat >> "ddh_domain_${dmn}.dat"
}

for ((i=1; i<=NRL; i++ ))
do
   runDHFiles "${DMN[$i]}"
done

おすすめ記事