Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2991868
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-05-14 16:07:35

文件1内容:
HEADxxxxxx1234567890xxxxxxxxxA
DETLxxxxxxxxxxxxxxx
HEADxxxxxx1289492310xxxxxxxxxB
DETLxxxxxxxxxxxxxxx
HEADxxxxxx1282712985xxxxxxxxxC
DETLxxxxxxxxxxxxxxx
HEADxxxxxx1288677724xxxxxxxxxD
DETLxxxxxxxxxxxxxxx

文件2内容:
A1234567890xxxxxxxxxxxxxxxxx
B1289492310xxxxxxxxxxxxxxxxx
C1282712985xxxxxxxxxxxxxxxxx

想得到输出如下的内容:

HEADxxxxxx1234567890xxxxxxxxxA
00A1234567890xxxxxxxxxxxxxxxxx
DETLxxxxxxxxxxxxxxx
HEADxxxxxx1289492310xxxxxxxxxB
00B1289492310xxxxxxxxxxxxxxxxx
DETLxxxxxxxxxxxxxxx
HEADxxxxxx1282712985xxxxxxxxxC
00C1282712985xxxxxxxxxxxxxxxxx
DETLxxxxxxxxxxxxxxx
HEADxxxxxx1288677724xxxxxxxxxD
DETLxxxxxxxxxxxxxxx

 

读文件1,从第11位起,读取10位,作为卡号,从31位起,读取1位,作为客户号。用这两个变量匹配文件2,如果有匹配记录,输出 “00A1234567890xxxxxxxxxxxxxxxxx”,没有匹配则不输出,不是以"HEAD"开头的直接输出“DETLxxxxxxxxxxxxxxx”

 

  1. awk 'NR==FNR{a[substr($0,1,11)]=$0;next}{print;b=substr($0,length($0))substr($0,11,10);if(b in a){print "00"a[b]}}' 2 1
[解析]
  先读文件2,再读文件1,文件2里截取开头11位内容作为数组a的下标,把整行内容赋值给数组a。读到文件1的第一行,打印第一行,并把该行的客户号和卡号赋值给变量b,判断如果该行的“客户号卡号”作为下标是否存在于数组a中,如果存在,则输出该下标的数组a的值,按要求在前面加00。
阅读(2858) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~