- 论坛徽章:
- 0
|
本帖最后由 zhang40104 于 2014-06-08 16:21 编辑
文件1:
11412b4b-19cf-4ca4-84e1-a16759d184fa anyString
3078064c-1de4-42d3-ac6c-890f19a77ba3 anyString
50f97f0d-b5cf-4909-a941-544f9d5158d7 anyString
.....
十万条记录左右,第一个字段是uuid,为方便大家写正则表达式,可以用[0-9A-F]{32}来表示,不考虑其中的“-”号。
文件2:
asdf=11412b4b-19cf-4ca4-84e1-a16759d184fa=ejfsi=3078064c-1de4-42d3-ac6c-890f19a77ba3=jsdfl
woej2adfo=50f97f0d-b5cf-4909-a941-544f9d5158d7=o1jls2jasdfl
将文件2中出现在文件1第一个字段的字符串,更改为文件一相应第二个字段的任意字符串
我原先的思路是:
awk --re-interval 'BEGIN {while(getline < "文件1")var[$2]=$1} {print gensub(/([0-9A-F]{32})/,var["\\1"],"g")}' 文件2
即先用awk将文件1读入一个关联数组,以uuid为键,anyString为值,然后在文件2中找连续32个16进制字符,替换成以找到的32个字符为键的数组值。
可是不行,原因是var["\\1"],这个反向引用第1个捕获行不通,\\1没有扩展成键,只是当成了"\\1"这个字符串。 |
|