奇妙なワードの問題

奇妙なワードの問題

文字列から別のフィールドを抽出するために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できないため、$inullと評価されます。 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
    

おすすめ記事