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

Posted 仲翎逸仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一个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编程吧。。。后台编程面试常问。。。

以上是关于请教一个AWK处理两个文件公共字段结合的题目的主要内容,如果未能解决你的问题,请参考以下文章

awk处理合并两个文件,急...

讲清楚,说明白!Linux从业人员必备工具--AWK文本处理利器实战

AWK的学习使用。

awk:基于另一个公共字段枚举字段

如何解释和优化awk数组以匹配和修改两个文件的公共列

匹配两个文件之间的两个字段 AWK