Unix-awk命令
请帮助我理解以下awk命令:Unix-awk命令,unix,awk,Unix,Awk,请帮助我理解以下awk命令: awk -v var1=$1 -v var2=$2 '$1 ~ var1 && $2 ~ var2; /^var1 var2/' $READ_FILE | awk '{print $3}' 我在邮局看到了这个命令: “$1~var1&&$2~var2”的用途是什么/^上述命令中的var1 var2/。应为: awk -v var1="$1" -v var2="$2" '$1 ~ var1 && $2 ~ var2; /^var1 v
awk -v var1=$1 -v var2=$2 '$1 ~ var1 && $2 ~ var2; /^var1 var2/' $READ_FILE | awk '{print $3}'
我在邮局看到了这个命令:
“$1~var1&&$2~var2”的用途是什么/^上述命令中的var1 var2/
。应为:
awk -v var1="$1" -v var2="$2" '$1 ~ var1 && $2 ~ var2; /^var1 var2/' "$READ_FILE"
这意味着内部awkvar1
成为shell变量$1
,var2
成为$2
。在awk内部(单引号内)还有$1
和$2
,它们表示输入文件中每行的字段1和字段2。如果第一个字段($1
)如果与var1
中字符串中的正则表达式匹配,并且同样与$2
和var2
匹配,则$1~var1&$2~var2
计算结果为1,并打印输入文件的相应行
/^var1 var2/
表示如果一行以字符串“var1 var2”开头,则打印该行(可能是打印标题) 同时仍在为链接中指定的目的工作
编辑:正如我刚才看到的,你的链接条目似乎已经被修复了
这个命令实际上有点过于复杂(在某种程度上)甚至不正确,正如您已经怀疑的那样
了解行$1~var1&&$2~var2/^var1 var2/
旨在让您首先了解两个重要事实
- 如果没有给出命令,但是模式匹配
将打印匹配的整行,即使没有显式的print语句awk
- 如果从命令行给出,则必须用
分隔多个模式代码>
-v
开关传入,一个获取awk变量var1
,另一个获取awk变量var2
$1~var1&&$2~var2
将测试第1个字段是否与存储在var1中的正则表达式匹配(~
此处为相关运算符),第2个字段是否与存储在var2中的正则表达式匹配
第二条语句/^var1 var2/
既多余又不正确。
因为这将匹配一行,该行以中的literal“var1”开头,后跟literal字符串var2
在给出的示例中,它不会造成太大的伤害,因为它不会以任何方式匹配,但它仍然是不正确的
使用正则表达式匹配运算符~
而不是使用=
进行相等性测试,这是建议的解决方案增加的另一个“不清晰性”
我的建议是只使用:
awk -v var1="$1" -v var2="$2" '$1==var1 && $2==var2 {print $3}' your-file-here
甚至不用打开另一个管道来打印存储在字段3中的值。我想知道这一行是否正确。。只需打印每一行匹配的内容?(在
;
之前)不,不应该<代码>$1~var1&$2~var2不符合规范,而且/^var1 var2/
绝对错误。@mikyra你是什么意思?不应该什么?我只是试图向OP解释它的含义,而不是它是否是一个好的解决方案。是的,这是不精确的,但这可能是故意的<代码>/^var1 var2/顺便说一句,这不一定是错误的,但它与变量var1
和var2
sry无关,我只是被困在了“它应该是:”的介绍中,因为它可能会得出结论,下面的例子可能就是使用的例子。也许“作者想必是想让它工作的方式”或类似的东西不会让我如此警觉。因为我认为这是误导性的,因为前面的介绍已经解释过了,是的,当然。@mikyra我认为你错了。OP逐字逐句地请求帮助理解awk命令及其目的,这就是我提供的。。