私はまだUnixを学んでおり、次のコード行を理解しています。awkを使ってファイルから文字列をパースする
echo "$lines" | awk '{split($0,a,":"); print a[3],a[2],a[1]}'
上記のコード行で何が起こっているのか分かりません。それは配列を宣言し、解析する文字列と同じに設定していますか?配列を宣言している場合は、後で結果をコードに出力できないのはなぜですか?
echo "${a[1]}"
上記の行は、文字列が解析されたときに配列aに格納されているものではなく、空の行を出力します。文字列には常に解析が必要なものがあることを知っています。配列を呼び出すと、スコープの内側にいることがわかります。私はちょうど私がコードで後でそれを印刷するのを妨げる配列aで何が起きているか理解していません。
'awk'配列' a'は 'awk'スクリプトでのみ利用できます。それはシェルの一部ではありません。だから後で 'echo'コマンドでアクセスできないのです。 –
次に、使用できる変数に配列を保存する方法はありますか? – Patrick
はい(あなたのコメントはいくつかのコードを含むように更新されました)そうですか?VAR =($(echo "$ lines" | awk '{split($ 0、a、 ":")} 'a =($(echo" $ lines "| awk '{...}'))'を使ってシェル配列を代入したいかもしれません。しかし、これはすべての行を単一のシェル配列に処理します。それがOKかどうかを判断する必要があります。配列要素内のスペースもなくなります(したがって、 'aa bb:cc dd:ee ff gg'が含まれていれば、3つのAwk配列要素から7つのシェル配列要素が得られます)。それがあなたにとって問題かどうかを判断する必要があります。 –