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

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

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ルールで使用できます。

答え2

Done by 2 methods

方法1:

var="d"
sed -n '/'$var'/p' file

出力

d   e   f

Python

#!/usr/bin/python
import re
var="d"
k=open('ooo','r')
for i in k:
    if var in i:
        print i.strip()

出力

d   e   f

関連情報