请教一个AWK处理两个文件公共字段结合的题目

在文件score.txt中存有如下数据:(姓名 分数)

lisi 88

bokeyuan 97

zhangsan 77

wangwu 89

hongliu 92

zhanghua 97

在文件student.txt中存有:

zhangsan

hongliu

使用awk, cut, grep, find等任意shell脚本,输出student.txt所有学生的分数,即输出:

zhangsan 77

hongliu 92

如果只在score.txt中处理,可以很容易得写出

awk ’ { if ($1 == “zhangsan”) print $0} ’ score.txt

但是结合另外一个文件,该怎么处理呢?

求人不如求自己,到处找了找处理方法,可以使用awk来处理多个文件,答案如下:

awk ’ {if (ARGIND==1) grade[$1] = $0} {if (ARGIND>1 && ($1 in grade)) print grade[$1]} ’ grade.txt name.txt

简化版得写法为:

awk ‘ARGIND==1 {grade[$1]=$0} ARGIND>1 && ($1 in grade) {print grade[$1]}’ grade.txt name.txt

分析:

ARGIND==1处理第一个参数,即grade.txt文件

{grade[$1] = $0} 以grade.txt文件中的第一列为索引,将grade.txt中得内容存入grade数组中

if (ARGIND>1 && ($1 in grade)) print grade[$1] 如果处理的是第二个及以后的文件,即name.txt,检查第一列(姓名)是否在grade数组中,如果在,就打印以姓名为索引的grade信息。

继续好好学习SHELL编程吧。。。后台编程面试常问。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值