的Linux shell脚本:从标准输入传递变量的awk
问题描述:
我有结构化的这样一个逗号分隔的.txt文件:的Linux shell脚本:从标准输入传递变量的awk
ABC,NAME1,LASTNAME1
DEF,NAME2,LASTNAME2
GHI,NAME3,LASTNAME3
在运行时:
$ ./script.sh file.txt
#!/bin/bash
awk -F, '/NAME1/{print $3}' "$1"
我得到我想要的输出:
LASTNAME1
当试图通过将变量传递给awk
来代替NAME1
时:
$ ./script.sh file.txt NAME1
#!/bin/bash
awk -v n="$2" -F, '/$n/{print $3'} "$1"
我根本没有得到任何输出。我检查了一下,在bash中输入的$2
确实是NAME1
。我错过了什么?在awk中
答
变量名是不有$
前缀, 所以应该只是n
代替$n
。 另外,您不能使用/.../
表达式中的变量。 你可以这样写:
awk -v n="$2" -F, '$0 ~ n {print $3}' "$1"
顺便说一句,如果n
参数应在第2列完全匹配的值, 那么最好使用精确的匹配条件与==
上$2
:
awk -v n="$2" -F, '$2 == n {print $3}' "$1"
啊,我明白了!所以,这个awk命令意味着:在我的研究中,在第1列($ 0)中搜索并且如果pattern(n)匹配(〜),打印...“?我还发现,$ 0意味着第一行?这是正确的 – Shushiro
@ Shushiro'$ 0'表示整个当前行。 – janos