这是[链接] Using awk to find a string in a file
[2 - link] awk command to accept two variables as parameters and return a value
这是表格:
----------------------------------------------------
Id Name CreationDate Comment
----------------------------------------------------
1 testing: 19.10.11 created by jag
2 develop 19.10.12 created by jag
3 array 19.10.12 created by jaguuuu
4 start123 19.10.12 created by akj
所以我提到了这两个,我想要做的是从第一列获取id号,从第二列获取name。
例如,如果我采用id = 1和name = testing;如果我在第1列中找到id = 1并在第2列中找到name = testing,那么我的输出将进行测试。
这是代码,我写道: a是一个存储有一些输出的变量。
b=$(echo "$a" | awk -v var1=1 -v var2=testing '$1 ~ var1 && $2 ~ var2 {print $2}')
echo "$b"
但它不打印任何东西。我认为它将打印出测试。
更新: field1 ::::
1 testing: 19.10.11 created by jag
在我们的案例中, 输入:
1 testing:
输出:
testing:
如果var1 = 1且var 2 =测试两者都在column1(“1”)和column2(“testing:”)下的同一行中找到
很抱歉提出了很多问题 - 对它很陌生,并尝试通过编写代码来学习。
注意:表存储在变量a中。
所以,这应该有效:
x=$(echo"$a"|awk -v var1=1 -v var2=testing '$1 ~ var1 && $2 ~ var2 {print $2}')
echo"$x"
但不知道为什么它不起作用。会检查一下你们提到的更多东西,并明天再回复你们。
由于
答案 0 :(得分:2)
将$
放在变量名前面以获取它们的值是shell语法。 awk不是shell。只需使用变量名称,就像使用C或大多数其他语言一样。
awk -v var1=1 -v var2=testing '$1 ~ var1 && $2 ~ var2 {print $2}'
但是,很可能这不是你真正想做的事情。发布带有示例输入和预期输出的另一个问题,我们可以向您展示正确的方法。
使用更新后问题的示例输入:
$ cat file
----------------------------------------------------
Id Name CreationDate Comment
----------------------------------------------------
1 testing: 19.10.11 created by jag
2 develop 19.10.12 created by jag
3 array 19.10.12 created by jaguuuu
4 start123 19.10.12 created by akj
$ awk -v var1=1 -v var2=testing '$1 ~ var1 && $2 ~ var2 {print $2}' file
testing: