awk处理多个文件

参考:

http://cwind.blog.51cto.com/62582/685253

 

cat file1:
0011AAA 200.00 20050321
0012BBB 300.00 20050621
0013DDD 400.00 20050622
0014FFF 500.00 20050401
cat file2:
I0011  11111
I0012  22222
I0014  55555
I0013  66666
规则:比较 file1的1-4字符 和 file2的2-5 字符,如果相同,将file2 的第二列 与 file1 合并 file3
0011AAA 200.00 20050321 11111
0012BBB 300.00 20050621 22222
0013DDD 400.00 20050622 66666
0014FFF 500.00 20050401 55555

 

 

note:

【1】

文件1的3、4行:

I0014  55555
I0013  66666

文件2的3、4行:

I0014  55555
I0013  66666

可见,顺序并不是按每一行对应的。如果对应,可以用行号为索引,如下操作:

 

可惜不是,那么,难道要取第一个文件的每一行,在第二个文件中遍历一遍进行查找吗?不是的,可以用哈希。采用字段做下标,就行了!

x[sub($1,2,4)]=$2

很妙!

采用行号做下标的话:

x[FNR]=substr($1,2,4);

【2】$4=x[substr($1,2,4)];

$4之前并不存在,这里就直接赋值了,于是产生了新的字段。试了一下,用$5=x[substr($1,2,4)];也是一样的。

 

【3】

如果取哈希数组时,传入了不存在的下标,会发生什么》如果文件2为:

0011AAA 200.00 20050321
0012BBB 300.00 20050621
0013DDD 400.00 20050622
0014FFF 500.00 20050401
0015FFF 500.00 20050401

 

那么返回值$4将会是空字符串。

 

 

 

 

另外,两个文件一起处理,也可以不用NR来判断的,可以使用getline:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值