免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk高手请进,看看怎么处理这个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-12-05 12:04 |只看该作者 |倒序浏览
本帖最后由 chinaboywg 于 2016-12-05 14:44 编辑

有如下文本a.txt
1803201F20602321180425邓良才           6029696000246632             313100000013  易路通    10200101104401040000012         323584000888      
1803201F20602321180423哞哞              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180425邓鸿德           6013820100015049442          104100000004  易路通    10200101104401040000012         323584000888      
1803201F20602321180425乔丹              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180426威圣炫           6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888   

替换成:
1803201F20602321180425aaaaaa           6029696000246632             313100000013  易路通    10200101104401040000012         323584000888      
1803201F20602321180423aaaa              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180425aaaaaa           6013820100015049442          104100000004  易路通    10200101104401040000012         323584000888      
1803201F20602321180425aaaa              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180426aaaaaa           6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888




将第1列的 邓良才 哞哞等替换成aaaa.. ,替换后保持格式不变;汉字有可能是2个,3个,4个,5个,6个....;3个汉字就替换成6个英文,4个汉字就替换成8个英文,6个汉字就替换成12个 。。。依次类推;
求用awk 处理,谢谢;



论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
2 [报告]
发表于 2016-12-05 12:43 |只看该作者

4个汉字替换成哪8个英文?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2016-12-05 14:01 |只看该作者
  1. #!/usr/bin/perl
  2. use warnings;
  3. use utf8;

  4. binmode (STDOUT, ':encoding(utf8)');
  5. my $tail = 'ceshi';

  6. while (<DATA>){
  7.     s/([^\d\s]+)/$tail/;
  8.     my $leng = length ($1) > 2 ? length ($1) * 2 : 0;
  9.     if ($leng){
  10.         $append = 'a' x ($leng - length ($tail));
  11.         s/(?<=\w)\b/$append/;
  12.     }
  13.     print;
  14. }
  15. __DATA__
  16. 602321180425邓良才           602969646632                313100000013  易路通    1020014010412         323584000888
  17. 602321180423哞哞                621626028016732          313584099990  易路通    1020044010012         323584000888
  18. 602321180425邓鸿德           601382015049442          104100000004  易路通    1020014010412         323584000888
  19. 602321180425乔丹                621626028016732          313584099990  易路通    1020044010012         323584000888
  20. 602321180426威圣炫           621626028016732          313584099990  易路通    1020014010412         323584000888
复制代码

论坛徽章:
0
4 [报告]
发表于 2016-12-05 14:06 |只看该作者

不能改变原有的列对齐格式
另外,要用awk 啊

论坛徽章:
0
5 [报告]
发表于 2016-12-05 14:13 |只看该作者
moperyblue 发表于 2016-12-05 12:43
4个汉字替换成哪8个英文?

随便 ceshices  

论坛徽章:
0
6 [报告]
发表于 2016-12-05 14:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
7 [报告]
发表于 2016-12-05 17:16 |只看该作者
汉字前面字符串长度都一定的情况下
  1. awk -vstr="aaaaaaaaaaaa" '{t=length($1)-22;$1=substr($1,0,22)substr(str,0,2*t)}1' a.txt|column -t
复制代码

论坛徽章:
0
8 [报告]
发表于 2016-12-05 17:29 |只看该作者
回复 7# elu_ligao

不行啊,原有的中间的空格不能丢掉啊要改成这样的:

1803201F20602321180425邓良才           6029696000246632             313100000013  易路通    10200101104401040000012         323584000888      
1803201F20602321180423哞哞              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180425邓鸿德           6013820100015049442          104100000004  易路通    10200101104401040000012         323584000888      
1803201F20602321180425乔丹              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180426威圣炫           6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
1803201F20602321180425aaaaaa           6029696000246632             313100000013  易路通    10200101104401040000012         323584000888      
1803201F20602321180423aaaa              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180425aaaaaa           6013820100015049442          104100000004  易路通    10200101104401040000012         323584000888      
1803201F20602321180425aaaa              6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888      
1803201F20602321180426aaaaaa           6216260000028016732          313584099990  易路通    10200101104401040000012         323584000888


论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2016-12-05 17:50 |只看该作者
回复 4# chinaboywg
并没有改变原始的文件格式, 只是 awk 不熟悉. 直接替换就行了.
  1. #!/usr/bin/perl
  2. use warnings;
  3. use utf8;

  4. binmode (STDOUT, ':encoding(utf8)');

  5. while (<DATA>){
  6.     s/([^\s\d]+)/'a' x length ($1) x 2/e;
  7.     print;
  8. }
  9. __DATA__
  10. 602321180425邓良才           602969646632                313100000013  易路通    1020014010412         323584000888
  11. 602321180423哞哞                621626028016732          313584099990  易路通    1020044010012         323584000888
  12. 602321180425邓鸿德           601382015049442          104100000004  易路通    1020014010412         323584000888
  13. 602321180425乔丹                621626028016732          313584099990  易路通    1020044010012         323584000888
  14. 602321180426威圣炫           621626028016732          313584099990  易路通    1020014010412         323584000888
复制代码

perl abc.pl
---------------------------------------------------------
602321180425aaaaaa           602969646632                313100000013  易路通    1020014010412         323584000888
602321180423aaaa                621626028016732          313584099990  易路通    1020044010012         323584000888
602321180425aaaaaa           601382015049442          104100000004  易路通    1020014010412         323584000888
602321180425aaaa                621626028016732          313584099990  易路通    1020044010012         323584000888
602321180426aaaaaa           621626028016732          313584099990  易路通    1020014010412         323584000888


论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-12-05 17:51 |只看该作者
回复 4# chinaboywg
并没有改变原始的文件格式, 只是 awk 不熟悉. 直接替换就行了.
  1. #!/usr/bin/perl
  2. use warnings;
  3. use utf8;

  4. binmode (STDOUT, ':encoding(utf8)');

  5. while (<DATA>){
  6.     s/([^\s\d]+)/'a' x length ($1) x 2/e;
  7.     print;
  8. }
  9. __DATA__
  10. 602321180425邓良才           602969646632                313100000013  易路通    1020014010412         323584000888
  11. 602321180423哞哞                621626028016732          313584099990  易路通    1020044010012         323584000888
  12. 602321180425邓鸿德           601382015049442          104100000004  易路通    1020014010412         323584000888
  13. 602321180425乔丹                621626028016732          313584099990  易路通    1020044010012         323584000888
  14. 602321180426威圣炫           621626028016732          313584099990  易路通    1020014010412         323584000888
复制代码

perl abc.pl
---------------------------------------------------------
602321180425aaaaaa           602969646632                313100000013  易路通    1020014010412         323584000888
602321180423aaaa                621626028016732          313584099990  易路通    1020044010012         323584000888
602321180425aaaaaa           601382015049442          104100000004  易路通    1020014010412         323584000888
602321180425aaaa                621626028016732          313584099990  易路通    1020044010012         323584000888
602321180426aaaaaa           621626028016732          313584099990  易路通    1020014010412         323584000888


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP