首页 > 代码库 > shell 之awk 关联数组高级应用
shell 之awk 关联数组高级应用
最近由于数据迁移过,有些用户信息需要再次确认下,也许数据量比较大,但是需要最终确认的比如说是用户ID和其对应的用户积分数,这样就会导致出现文本a(老的数据),文本b(新的数据)。比如
1101 1231102 1111103 1451104 152
这是文本a.txt
文本b.txt如下
1101 1231102 1121103 1541104 152
列举的文本例子只是为了说明使用方法列举的最简单的文本,实际数据可能要复杂的多,可能会出现b.txt 中出现的ID在a.txt中没有出现等等情况,这里只是为了说明awk 关联数组的高级应用,方便大家理解。
我们会发下b.txt中的ID 为1102 和1103 用户的积分数与先前的是不同的,那么如何通过shell 来处理呢?下面介绍强大的文本工具awk:
提取两个文本中第二列相同并将积分进行合并:
awk ‘NR=FNR{a[$1]=$2}NR!=FNR{$2==a[$1] print $0,a[$1]}‘ a.txt b.txt 可以得到如下结果:
1101 123 1231104 152 152
其中NR,FNR都为awk的内置的数据变量,其中NR为含处理过的所有的数据行总数,FNR为处理过的当前数据文件中的数据行的总数。简单的来说可以这么理解NR为执行读取两个文本行的总数,而FNR为读取第一个文本行的数量,所以判断条件可以通过“!=”也可以通过“>”来判断。而a[$1]=$2为将第一个文本行中第二个字段赋值给数组a,然后当处理到第二个文本时,可以利用已经赋值的数组进行判断进行有条件的输出。
然后第二列积分数不同的以此类推即可。
shell 之awk 关联数组高级应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。