匹配多个字符串,如果两个字符串都在同一行,则打印-AWK

时间:2018-09-19 13:29:30

标签: bash awk

如果我想找到defstring3,这很好。

defstring1=name
defstring2=surname
defstring3="defstring1 defstring2"
echo "name surname is:" $(awk -v string="$defstring3" '$0~string' namelist) >> result

但是我想消除defstring3并使用defstring1和defstring2。因此,我想让代码搜索整个名称列表文本文件,并在defstring1和defstring2都在同一行时打印出来。我一直尝试,但找不到。像这样...

echo "name surname is:" $(awk -v string1 ="$defstring1" string2="defstring2" '$0~string1~string2' namelist) >> result

2 个答案:

答案 0 :(得分:2)

当前,您正在测试更强的条件“ x y”。现在,您需要“ x”和“ y”。语法为:

$ awk -v x="$value1" -v y="$value2" '$0~x && $0~y'

如果您想要当前行为的确切副本

$ awk -v x="$value1" -v y="$value2" '$0~x" "y'

答案 1 :(得分:1)

怎么样?

echo "name surname is:" $(awk -v string1="defstring1" string2="defstring2" '$0~string1 && $0~string2' namelist) >> result

在我的测试中:

$ cat foo.txt
foo
bar
foobar
$ awk -v string1="foo" -v string2="bar" '$0~string1 && $0~string2' foo.txt
foobar