/ / awkでbash連想配列を割り当てる - bash、shell、awk

awk-bash、shell、awkにbash連想配列を割り当てる

私の質問は、awkスクリプト内でbash変数を代入することは可能かということです。

すなわち 以下が私が書いたシェルスクリプトであると仮定すると、

declare -A sample_associative_array
awk -F"=" "{$sample_associative_array[$2]=$1}"  /tmp/sample.txt

与えられた/tmp/sample.txtは次のとおりです。

abc=0
def=1

私は試した

echo $sample_associative_array[0]

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

どんな助けもありがとう。

乾杯!

回答:

回答№1は1

AwkとBashではまったく異なるスコープを使用しているため、別の変数で宣言された変数を使用できるようにすると、プロセスの主権を侵害することになります。

あなたがしようとしていることは、接頭辞/接尾辞を削除してパラメータ展開を使用することによってBashで非常に簡単に行うことができます。 ${parameter#word} そして ${parameter%word}。詳しくはBashのマニュアルを参照してください。

また、Bashの配列参照は他の構文を使用します。 ${sample_associative_array[0]} あなたが欲しいものです。


回答№2については4

全く同じことではありませんが、あなたは持つことができます awk で使用できる出力文字列 bash 組み込みコマンド declare 連想配列を生成します。私はなぜあなたがこれをしたいのか完全にはわからない。

$ declare $( awk -F"=" "{print "aa["$2"]="$1}" sample.txt )
$ echo ${aa[0]}
abc
$ echo ${aa[1]}
def

回答№3の場合は1

いいえ。子プロセスは親の変数に代入できません。言語に関係なくこの問題が発生します。 awk 直接でもできない 読む a bash 連想配列でも、bash(または私が知っている他のシェル)から配列をエクスポートすることはできないためです。

言語を混在させようとすると、常にこの種の問題が発生します。一般的なヒントは、全体の多くをどちらかに書き込むことです。 bash または awkどちらも非常に強力です。