awk命令 - 用于返回变量的多个变量

时间:2014-09-10 21:44:49

标签: shell awk

这是[链接] 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"

但不知道为什么它不起作用。会检查一下你们提到的更多东西,并明天再回复你们。

由于

1 个答案:

答案 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: