如果我想找到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
答案 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