免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助大神一个文本处理问题 [复制链接]

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
21 [报告]
发表于 2015-02-27 10:52 |只看该作者
[jay.liu2@Dev-UNAR-M1 ~]$ awk '{if($1=="bb") gsub("/","",$2) gsub("/","",$3); print}' urfile.txt
a1 1/2 332 55 66
bb 99 888 666 55
a2 22 8/7 553 11
a3 11 3/5 66 777
bb ab 666 333 553
bb 333 cd 222 11
c1 555 a/b 88 32
d3 c/d 222 111 999
[jay.liu2@Dev-UNAR-M1 ~]$ cat urfile.txt
a1 1/2 332 55 66
bb 99 888 666 55
a2 22 8/7 553 11
a3 11 3/5 66 777
bb a/b 666 333 553
bb 333 c/d 222 11
c1 555 a/b 88 32
d3 c/d 222 111 999

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
22 [报告]
发表于 2015-02-28 07:55 |只看该作者
回复 1# 黑王子的白马

Here you are

$ awk '$1=="bb"{for(n=2;n<=3;n++){k=$n;gsub("/","",$n);if(k!=$n)a[k]=$n}}{for(n=2;n<=3;n++)if(a[$n]!="")$n=a[$n]}1' FILE
a1 1/2 332 55 66
bb 99 888 666 55
a2 22 8/7 553 11
a3 11 3/5 66 777
bb ab 666 333 553
bb 333 cd 222 11
c1 555 ab 88 32
d3 cd 222 111 999

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
23 [报告]
发表于 2015-02-28 09:46 |只看该作者
@黑王子的白马
  1. sed -i '/^[bbc1d3]/s/\///g' youfile
复制代码
看明白你的需求,就用这笨方法实现了。

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-04 06:20:00数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00
24 [报告]
发表于 2015-02-28 12:01 |只看该作者
本帖最后由 swenzhao 于 2015-02-28 14:18 编辑

回复 10# 黑王子的白马


    经过大量测试,终于帮你搞定了,脚本有点笨拙:
#!/usr/local/bin/bash
#by swen.zhao
#列出bb.txt所有第二列和第三列带有斜线的关键字,并输出到文件result.out中。
awk '$2~/\//{print $2};$3~/\//{print $3}' bb.txt >result.out
#要执行循环操作,所以先得到文件行数。
lines=`cat result.out | wc -l`
#循环操作,找出有重复关键字,并全文替换,并保存。
for (( i=1;i<=$lines;i++ ))
do
    key=`sed -n "${i}p" result.out`
     #判断关键字是否有重复
    if [ `grep "$key" bb.txt | wc -l` -gt 1 ]
    then
         #如果有重复,先把关键字中的斜线去掉,得到新的变量。
        rkey=`echo $key | sed -n 's/\///p'`
         #执行全文关键字替换。因为变量中包含特殊字符,所以要用下面的方法进行替换。
        sed -i "" "s#$key#$rkey#" bb.txt                #我是在freebsd下测试的,centos应该吧-i后面的双引号去掉就可以了。
    else
       continue
    fi
done

希望能解决你的问题。输出结果:
[root@basefreebsd10 ~]# cat bb.txt
a1 1/2 332 55 66
bb 99 888 666 55
a2 22 8/7 553 11
a3 11 3/5 66 777
bb ab 666 333 553
bb 333 cd 222 11
c1 555 ab 88 32
d3 cd 222 111 999

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
25 [报告]
发表于 2015-02-28 12:05 |只看该作者
本帖最后由 我是一隻羊 于 2015-02-28 12:45 编辑
  1. awk '$1=="bb"{a[++i]=$2;a[++i]=$3;gsub("/","",$2)gsub("/","",$3);print;next}{for(i in a)if($2==a[i]||$3==a[i])gsub("/","",$0)}1'
复制代码
看明白需求之后又写了下...

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
26 [报告]
发表于 2015-02-28 16:26 |只看该作者
题目读清楚发现好玩一点了。

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
27 [报告]
发表于 2015-02-28 18:22 |只看该作者
[tuyajie@MYVM ~]$ awk 'NR==FNR{if($1=="bb") {if($2~/\//)a[i++]=$2;if($3~/\//)a[i++]=$3};next}{for(i=1;i<=NF;i++) {for (foo in a){if($i==a[foo])gsub("/","",$i)}}print}' input input
a1 1/2 332 55 66
bb 99 888 666 55
a2 22 8/7 553 11
a3 11 3/5 66 777
bb ab 666 333 553
bb 333 cd 222 11
c1 555 ab 88 32
d3 cd 222 111 999
[tuyajie@MYVM ~]$ cat input
a1 1/2 332 55 66
bb /99 888 666 55
a2 22 8/7 553 11
a3 11 3/5 66 777
bb a/b 666 333 553
bb 333 c/d 222 11
c1 555 a/b 88 32
d3 c/d 222 111 999

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
28 [报告]
发表于 2015-02-28 20:45 |只看该作者
看了下,好像只有28楼的awk是对的.....学习了..想的比较全面...

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
29 [报告]
发表于 2015-02-28 21:01 |只看该作者
黑歌13楼写的不也是对的吗?回复 29# 我是一隻羊


   

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
30 [报告]
发表于 2015-02-28 21:15 |只看该作者
zsszss0000
哎呀,没注意,把大神给漏了,不好意思....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP