我试图使用awk对文件中的第一列进行不区分大小写的vlookup,但它忽略IGNORECASE并且不使用相同的awk匹配如何比较第3列
awk -F, 'BEGIN{IGNORECASE=1} FNR==NR{a[$1]=$3","$4;next} {print (($1 in a) ? $0","a[$1] : $0",NA,NA");}'
cat f1.txt
FOO,LONDON,45,789
goo,US,46,9876
cat f2.txt
FOO,LONDON,45,789
GOO,US,46,9876
awk -F, 'BEGIN{IGNORECASE=1} FNR==NR{a[$1]=$3","$4;next} {print (($1 in a) ? $0","a[$1] : $0",NA,NA");}' f1.txt f2.txt
FOO,LONDON,45,789,45,789
GOO,US,46,9876,NA,NA
答案 0 :(得分:0)
请参阅以下GNU Awk
页面摘录
另一种特定于gawk的方法是将变量IGNORECASE设置为非零值(请参阅内置变量)。当IGNORECASE不为零时,所有正则表达式和字符串操作都会忽略大小写。
通常,您不能使用IGNORECASE使某些规则不区分大小写,而其他规则区分大小写,因为没有直接的方法来为特定规则的模式设置IGNORECASE .17为此,请使用括号表达式或的tolower()的。但是,只能对IGNORECASE执行一项操作,即可同时为所有规则动态打开或关闭区分大小写。
因此,请将GNU Awk's
tolower()
函数用作输入,
awk -F, 'FNR==NR{a[tolower($1)]=$3","$4;next} {print ((tolower($1) in a) ? $0","a[tolower($1)] : $0",NA,NA");}' f1.txt f2.txt
FOO,LONDON,45,789,45,789
GOO,US,46,9876,46,9876