フィールド=変数に基づいて行をフィルタリング

フィールド=変数に基づいて行をフィルタリング

VAR値と同じ最初のフィールドをフィルタリングしたいです。同様の問題もあります。ここ~対応するソリューション(SOL1)を再現できません。しかし、に基づいてeval(SOL2)うまくいきますが、人工的なようです。もっとSOL1に似たソリューションを探しています。

$ cat tmp
a   b   c
d   e   f
g   h   i
$ awk '$1 ~ /d/' tmp
d   e   f
$ VAR='d'

SOL1(失敗)

$ awk '$1~VAR' tmp
a   b   c
d   e   f
g   h   i

SOL2(解決方法)

$ CMD='awk '"'"'$1'"~/$VAR/'"
$ echo "$CMD"
awk '$1~/d/'
$ eval "$CMD" tmp
d   e   f

ベストアンサー1

文字列を==

VAR="d"
awk -v var="$VAR" '$1==var' file

出力:

定義

からman awk

-v var=val:プログラムが実行される前にvar変数にval値を割り当てます。これらの変数値は、AWKプログラムのBEGINルールで使用できます。

おすすめ記事