免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lionsingasong
打印 上一主题 下一主题

[文本处理] 文本周期性替换 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
11 [报告]
发表于 2014-05-13 09:16 |只看该作者
回复 10# lionsingasong
  1. from="a,b,c,d,e,f";to="1,2,3,4,5,6";echo 'a x
  2. b x
  3. c x
  4. d x
  5. e x
  6. f x
  7. a x
  8. b x
  9. c x
  10. d x
  11. e x
  12. f x' |awk -v from=$from -v to=$to 'BEGIN{len=split(from,a,",");split(to,b,",");for(i=1;i<=len;i++)c[a[i]" "i]=b[i]}{$1=c[$1" "(NR%len?NR%len:len)]}1'
  13. 1 x
  14. 2 x
  15. 3 x
  16. 4 x
  17. 5 x
  18. 6 x
  19. 1 x
  20. 2 x
  21. 3 x
  22. 4 x
  23. 5 x
  24. 6 x
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
12 [报告]
发表于 2014-05-13 09:36 |只看该作者
回复 10# lionsingasong
终于有点明白楼主的真正意图了,
(X Y O O  Z O)=>(Y X O Ob ZZ Ob)的一个替换中,
每一个替换规则仅适用于文件中的某一行,比如
X->Y仅对第一行进行替换,是这样吗?
  1. #!/bin/bash
  2. a=(X Y O O  Z O)
  3. b=(Y X O Ob ZZ Ob)

  4. cp i ibk
  5. for((i=0;i<${#a[@]};i++))
  6. do
  7.     let lno=i+1
  8.     sed -i "${lno}s/${a[i]}/${b[i]}/" ibk
  9. done
复制代码
  1. cat i
  2. X 1.1 1.2 1.3
  3. Y 1.0 1.0 2.2
  4. O 1.2 1.3 1.4
  5. O 1.4 1.4 2.4
  6. Z 1.4 1.4 2.4
  7. O 1.2 1.3 1.4

  8. cat ibk
  9. Y 1.1 1.2 1.3
  10. X 1.0 1.0 2.2
  11. O 1.2 1.3 1.4
  12. Ob 1.4 1.4 2.4
  13. ZZ 1.4 1.4 2.4
  14. Ob 1.2 1.3 1.4
复制代码

论坛徽章:
0
13 [报告]
发表于 2014-05-13 11:25 |只看该作者
回复 12# Herowinter


太感谢你了

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
14 [报告]
发表于 2014-05-13 12:04 |只看该作者
回复 13# lionsingasong
但我现在觉得这代码不对啊,按你的描述,
数据有1000+行,你不可能定义一个1000+元素
的数组来描述替换规则,感觉还是不是非常清楚你的
需求。


   

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
15 [报告]
发表于 2014-05-13 12:21 |只看该作者
回复 10# lionsingasong
问题在于你的这段描述
  1. (O O......O O ),目的替换为(O O Ob Ob...Ob....O O....Ob)
复制代码
如果不是以行号来区分的话,你怎么判断哪些O替换为O;
哪些O替换为Ob?


   

论坛徽章:
0
16 [报告]
发表于 2014-05-13 12:23 |只看该作者
回复 14# Herowinter


   
   你有什么即时通讯的软件嘛,比如QQ啥的,那样请教起来比较方便。我的QQ:673333048,方便的话加一下,谢谢

论坛徽章:
0
17 [报告]
发表于 2014-05-13 12:28 |只看该作者
回复 15# Herowinter


    其实主要想话的就是a=(O....O)这个部分,这个部分只有64个,所以我可以先取出第一步出来然后找出要替换的,再输入b=(O.. OB....O..OB..),然后用你教我的程序把整个文件的一次性搞定。
   不过刚才试了用那个程序,输出中O一个都没替换,这事怎么回事?

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
18 [报告]
发表于 2014-05-13 12:59 |只看该作者
回复 17# lionsingasong
公司开不了QQ,你怕影响别人可以站内发消息给我,
但我觉得这个必要不大,关键是你要说清楚你的需求。

请贴出一个10行左右的原始文本以及对应的结果文件,
并简单描述替换规则。

   

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
19 [报告]
发表于 2014-05-13 13:13 |只看该作者
本帖最后由 klainogn 于 2014-05-13 13:17 编辑

cat key.map
a aa
b bb
c cc

cat file
a xxxxxxxxxxxx
b yyyyyyyyyyyyy
c zzzzzzzzzzzzz

awk 'NR==FNR{a[$1]=$2;next}a[$1]{$1=a[$1]}1' key.map file
aa xxxxxxxxxxxx
bb yyyyyyyyyyyyy
cc zzzzzzzzzzzzz

论坛徽章:
0
20 [报告]
发表于 2014-05-13 13:26 |只看该作者
回复 18# Herowinter


    问题基本解决了,我先把现在的工作完成,结束后再找高手你请教
                  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP