根据 field=variable 过滤行

根据 field=variable 过滤行

我想过滤等于 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:在程序开始执行之前,将值 val 赋给变量 var。此类变量值可用于 AWK 程序的 BEGIN 规则。

答案2

Done by 2 methods

方法一:

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

相关内容