私の質問は、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は1Awkと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
どちらも非常に強力です。