免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3015 | 回复: 8
打印 上一主题 下一主题

[文本处理] AWK实现VLOOKUP功能求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-08-01 14:55 |只看该作者 |倒序浏览
想用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




论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
2 [报告]
发表于 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
复制代码

论坛徽章:
0
3 [报告]
发表于 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


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

论坛徽章:
0
4 [报告]
发表于 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

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

论坛徽章:
0
5 [报告]
发表于 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


论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
6 [报告]
发表于 2019-08-01 17:20 |只看该作者
回复 5# wan_qin

把你的文件上传看看

论坛徽章:
0
7 [报告]
发表于 2019-08-01 17:27 |只看该作者
回复 6# WilliBhamlll
已经上传,麻烦您帮忙看下。

Desktop.zip

326 Bytes, 下载次数: 21

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
8 [报告]
发表于 2019-08-01 17:35 |只看该作者
回复 7# wan_qin

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


论坛徽章:
0
9 [报告]
发表于 2019-08-01 17:42 |只看该作者
回复 8# WilliBhamlll
明白了,我原来的脚本也是没有问题的,就是因为文件格式的问题导致出错了,非常感谢!!!!!!!

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP