如何使用Awk使用双引号下的列值过滤行

时间:2018-05-17 06:46:41

标签: unix awk

"A","B",123,"C","AAB"
"A","BB",234,"CC","BA"
"AA","B",123,"CC","CBB"
"AA","BB",213,"C","CCA"

我想获得$ 1 == AA

的那些行
 awk 'BEGIN { FS = ","; OFS = FS;} {if ($1=="AA") print}'

但它不起作用。如果数据在双引号中,则它可以正常工作。

2 个答案:

答案 0 :(得分:1)

关注awk可能对您有帮助。

awk -F, '{val=$1;gsub(/\"/,"",val)} val=="AA"'  Input_file

解决方案第二:

awk -F"[\",]" '$2=="AA"'  Input_file

答案 1 :(得分:1)

只需将文字"与转义字符匹配即可。这是 直接过滤器,用于匹配第一列上的文字"AA"。由于awk基于pattern { action }工作,因此条件匹配以查看第一列是"AA"是否可以直接完成而无需使用显式{ print }

如果该行满足条件,则awk的条件为awk 1 file,在这种情况下会打印该行。

awk -v FS=, '$1=="\"AA\""' file

此外,您可以通过将匹配字符串放在单引号下的变量中并让它与变量匹配来避免转义

awk -v FS=, -v m='"AA"' '$1==m' file