Chinaunix

标题: AWK实现VLOOKUP功能求助 [打印本页]

作者: wan_qin    时间: 2019-08-01 14:55
标题: AWK实现VLOOKUP功能求助
想用AWK实现EXCEL的VLOOUP功能,test1.csv和test2.csv文件内容如下
[root@localhost test]# cat test2.csv
aaa|111
bbb|222
[root@localhost test]# cat test1.csv
aaa|a|a1
bbb|b|a2
ccc|c|c1


需要的效果:
aaa|111|a|a1
bbb|222|b|a2
ccc||c|c1

用AWK命令输出的却是下面这种效果,不知道哪里出问题了。
[root@localhost test]# awk -F "|" -vOFS="|" '{if(NR==FNR){if($1!="" && $2!=""){eci[$1]=$2}}else{if($1 in eci){$1=$1"|"eci[$1]}else{$1=$2"|"} {print $0}}}' test2.csv test1.csv
|a|a111
|b|a222
c||c|c1


单独打印$1、$2、$3没有问题,如果打印$0就出问题
[root@localhost test]# awk -F "|" -vOFS="|" '{if(NR==FNR){if($1!="" && $2!=""){eci[$1]=$2}}else{if($1 in eci){$1=$1"|"eci[$1]}else{$1=$2"|"} {print $1}}}' test2.csv test1.csv
aaa|111
bbb|222
c|

[root@localhost test]# awk -F "|" -vOFS="|" '{if(NR==FNR){if($1!="" && $2!=""){eci[$1]=$2}}else{if($1 in eci){$1=$1"|"eci[$1]}else{$1=$2"|"} {print $2}}}' test2.csv test1.csv
a
b
c

[root@localhost test]# awk -F "|" -vOFS="|" '{if(NR==FNR){if($1!="" && $2!=""){eci[$1]=$2}}else{if($1 in eci){$1=$1"|"eci[$1]}else{$1=$2"|"} {print $3}}}' test2.csv test1.csv
a1
a2
c1





作者: WilliBhamlll    时间: 2019-08-01 16:52
  1. awk -F\| 'NR==FNR{a[$1]=$2;next}{sub($1,$1""FS""a[$1])}1' test2 test1
  2. aaa|111|a|a1
  3. bbb|222|b|a2
  4. ccc||c|c1
复制代码

作者: wan_qin    时间: 2019-08-01 17:08
回复 2# WilliBhamlll
[root@localhost test]# awk -F\| 'NR==FNR{a[$1]=$2;next}{sub($1,$1""FS""a[$1])}1' test2.csv test1.csv
|a|a111
|b|a222
ccc||c|c1


我用您的脚本打印出来也是这样的。


作者: wan_qin    时间: 2019-08-01 17:08
回复 2# WilliBhamlll

[root@localhost test]# awk -F\| 'NR==FNR{a[$1]=$2;next}{sub($1,$1""FS""a[$1])}1' test2.csv test1.csv
|a|a111
|b|a222
ccc||c|c1

我用您的脚本也是这样的。

作者: wan_qin    时间: 2019-08-01 17:09
回复 2# WilliBhamlll
[root@localhost test]# awk -F\| 'NR==FNR{a[$1]=$2;next}{sub($1,$1""FS""a[$1])}1' test2.csv test1.csv
|a|a111
|b|a222
ccc||c|c1



作者: WilliBhamlll    时间: 2019-08-01 17:20
回复 5# wan_qin

把你的文件上传看看
作者: wan_qin    时间: 2019-08-01 17:27
回复 6# WilliBhamlll
已经上传,麻烦您帮忙看下。

Desktop.zip

326 Bytes, 下载次数: 21


作者: WilliBhamlll    时间: 2019-08-01 17:35
回复 7# wan_qin

你的源文件有问题,先执行下面的命令处理下。
  1. dos2unix test1.txt
  2. dos2unix test2.txt
复制代码



作者: wan_qin    时间: 2019-08-01 17:42
回复 8# WilliBhamlll
明白了,我原来的脚本也是没有问题的,就是因为文件格式的问题导致出错了,非常感谢!!!!!!!






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2