awkはシェル文字列(変数)のフィールド識別子も使用できますか?

awkはシェル文字列(変数)のフィールド識別子も使用できますか?

まあ、私が試した方法では明らかに不可能です。

この選択肢を得ることができますバーただし、結果の文字列は有効です。

#!/bin/bash

path1=/usr/tmp/foo/bar/baz

awk -F/ '{print $5}' <<< "$path1"

これまでは大丈夫です。しかし、<<<演算子と悪名高いパイプを使用したくない場合はecho | ...どうすればよいですか?簡単に言えば、私がやりたいことは、path1ディレクティブを変数として渡すことです。-v pa="$path1"そして-F/のフィールド区切り記号とフィールド識別子を使用して$5解析されます。awk内部 pa値が次のような変数外部 path1シェル変数。 「社内」でも可能awkですか?

ベストアンサー1

-vオプションや引数var=valueの問題awkは、ANSI Cエスケープシーケンス(例えば、\n... \b)が拡張され(GNU awk4.2以降では値がで始まり@/終わった場合は、/正規表現型の変数として扱われます。)。

もう 1 つの方法は、以下を使用またはARGV配置ENVIRON awkすることです。

awk -F / 'BEGIN{$0 = ARGV[1]; print $5}' "$path1"

または:

export path1
awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'

または:

path1="$path1" awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'

今、あなたが望むものがシェル変数を分割することであれば、これは必要ないかもしれませんawk

すべてのPOSIXシェルで:

IFS=/; set -f
set -- $path1
printf '%s\n' "$5"

おすすめ記事