文字列から別のフィールドを抽出するためにawkを使用しようとしています。
例:
selected="a2.flac|a3.flac|a4.flac"
first_file=$(echo "$selected" | awk -F'|' '{print $1}')
上記のコードは私が期待するa2.flacを返します。しかし、今では変数を繰り返して一度に1つのファイルを取り出したいと思います。だから私はこれを試しました:
i=1
first_file=$(echo "$selected" | awk -F'|' '{print $i}')
私はこれが最初のファイルをインポートすると思いましたが...何も返されませんでした。だから次にこれを試しました。
i=1
first_file=$(echo "$selected" | awk -F'|' '{print \$i}')
これも機能しません。私もこれを試しました:
i=1
first_file=$(echo "$selected" | awk -F'|' n=$i '{print $n}')
また、これを試しました。
i=1
first_file=$(echo "$selected" | awk -v -F'|' n=$i '{print $n}')
私が試したすべてがうまくいかないようです。私は何がうまくいくのかわかりません。
ベストアンサー1
$i
シェル変数がありますがアクセスawk
できないため、$i
nullと評価されます。 i) スクリプトと共に double qupted を使用して、シェルが実行awk
に渡すawk
前に変数を拡張するようにするか、または ii) 変数awk
として渡すことができます。awk
二重引用符を使用してください。シェルは変数を拡張するので、最初の変数をエスケープして、シェルから解釈せずにシェルに渡すようにする必要が
$
あります。awk
$ i=1 $ first_file=$(echo "$selected" | awk -F'|' "{print \$$n}") $ echo "$first_file" a2.flac
変数をに渡すには、
awk
次の構文が必要です。ほぼ正しい:$ first_file=$(echo "$selected" | awk -F'|' -vi="$i" '{print $i}') $ echo "$first_file" a2.flac