免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11803 | 回复: 8
打印 上一主题 下一主题

求awk替换文本的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-11 11:52 |只看该作者 |倒序浏览
数据文件1
B|20060512|320803410|320803410010026|603091008200013282|00000000000000|010701|00|0|965.00|0|   |1 |000000000|603091008200013282 |43288.10|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|
B|20060512|210283001|210283001088311|603091430200020732|00000000000000|020432|03|0|1000.00|0|   |1 |000000000|603091430200020732 |1022.62|5.00|0.00|0.00|0.00|0.00|0.00|               |1003400210|
B|20060512|320803220|320803220010034|603091008200013563|00000000000000|010701|00|0|106.00|0|   |1 |000000000|603091008200013563 |189194.71|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|
B|20060512|530623006|530623006087830|603091100240168295|00000000000000|020432|03|0|1800.00|0|   |1 |000000000|603091100240168295 |1891.00|9.00|0.00|0.00|0.00|0.00|0.00|               |1003400210|
B|20060512|320803280|320803280010034|603091100240160788|00000000000000|010701|00|0|1000.00|0|   |1 |000000000|603091100240160788 |72029.58|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|
B|20060512|320803240|320803240010016|603091100240160807|00000000000000|010701|00|0|1550.00|0|   |1 |000000000|603091100240160807 |40611.68|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|
B|20060512|320803340|320803340010062|603091008200013311|00000000000000|010701|00|0|383.00|0|   |1 |000000000|603091008200013311 |31728.41|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|
B|20060512|320803240|320803240010015|603091100240160807|00000000000000|010701|00|0|1100.00|0|   |1 |000000000|603091100240160807 |39061.68|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|
B|20060512|320803270|320803270010019|603091008200013580|00000000000000|010701|00|0|569.00|0|   |1 |000000000|603091008200013580 |77170.07|0.00|0.00|0.00|0.00|0.00|0.00|               |1000101000|

列表文件1
010101|活期开户
010102|活期续存
010103|活期取款
010104|活期销户
010110|多笔查询测试
010112|修改日期
010201|定期开户

列表文件2
320803008|楚州区板闸
320803100|楚州区镇淮楼
320803110|楚州区建淮
320803120|楚州区三堡
320803150|楚州区范集
320803160|楚州区白马湖
320803170|楚州区林集
320803180|楚州区南闸
320803190|楚州区平桥
320803210|楚州区车桥

问题是:用awk把数据文件1的第三列按列表文件2替换,第七列按列表文件1替换,请给出方法!谢谢

[ 本帖最后由 ch.js 于 2006-6-20 15:50 编辑 ]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2006-06-11 22:56 |只看该作者
假设“列表文件1”中的空格是用“#”替换了的。
该脚本只替换列表文件1
列表文件2的替换可以照此办理,应该不难了。

FNM=数据文件1
DC=列表文件1

awk -F# -v DIC=$DC 'BEGIN {
        cnt = 0
        while(getline < DIC > 0)
        {       a[cnt] = $1
                b[cnt++] = $2
        }
        total= cnt
}
{       for(i = 0; i < total; i++)  gsub(a[i], b[i], $0)
        printf("%s\n", $0)
        while(getline > 0)
        {       for(i = 0; i < total; i++)  gsub(a[i], b[i], $0)
                printf("%s\n", $0)
        }
}' $FNM
exit
~

论坛徽章:
0
3 [报告]
发表于 2006-06-12 04:54 |只看该作者
awk -F "[ | ]" 'BEGIN{OFS="|"}FILENAME~"c"{a[$1]=$3}FILENAME~"b"{b[$1]=$2}FILENAME~"a"{print a[$3],b[$7]}' b c a
你的分割附有问题。给的文件也很奇怪。
文件a为数据文件1
文件b列表文件1
文件c列表文件2

[ 本帖最后由 shitou9000 于 2006-6-12 04:59 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-06-12 15:59 |只看该作者
楼上大致思路是正确的。
楼主的字段分隔符是比较乱,有|,有全角空格,还有半角空格。建议两个列表文件统一一下。

论坛徽章:
0
5 [报告]
发表于 2006-06-14 18:41 |只看该作者

谢谢各位

我的文件应该全是用“|”做分隔符的,发帖时在想表达的方法,没统一,对不起了!
我会认真学习的,谢谢了

论坛徽章:
0
6 [报告]
发表于 2006-06-20 15:48 |只看该作者
我的方法:
join -t"|" -a1 -1 3 -2 1 -o 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 2.2 数据文件1 列表文件2 | join -t"|" -a1 -1 7 -2 1 -o 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 2.2 - 列表文件1 | awk 'BEGIN{FS=OFS="|"}{if($26!="") $3=$26}{if($27!="") $7=$27}{print $0}' > out.txt

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
7 [报告]
发表于 2006-06-29 21:44 |只看该作者

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
8 [报告]
发表于 2006-06-29 21:51 |只看该作者
也适合在另一个niuniu-2118提出的《替换》中的问题

[ 本帖最后由 zongyaotang 于 2006-6-29 22:02 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2012-11-13 07:52 |只看该作者
mark,正好在研究这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP