免费注册 查看新帖 |

Chinaunix

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

[文本处理] 各位大神有空了帮忙解决下问题,谢谢, [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2020-12-17 09:06 |只看该作者 |倒序浏览
【需求】:将file文件中,每行内容数字出现的个数大于2的话,将其进行语句内容替换
    如:FQ.`pay` AS '[`pay`].是否启用1.启用2.禁用34.测试',  
        该行内容:出现数字 1、2、34 共计3个数字
        那么按照【需要结果】进行 输出,将该行修改为如下内容进行输出:
        
    使用:意思理解了,用 awk 或者 sed 都可以
   
        (CASE
            WHEN FQ.`pay`=1 THEN '1.启用'
            WHEN FQ.`pay`=2 THEN '2.禁用'
            WHEN FQ.`pay`=34 THEN '34.测试'        
        END) AS '是否启用',


【file内容】:

SELECT
    FQ.`id` AS '[`id`].ID',

    FQ.`pay` AS '[`pay`].是否启用1.启用2.禁用34.测试',
    FQ.`sex` AS '[`sex`].性别1.男的2.女的',
   
    FQ.`updated_at` AS '[`updated_at`].更新时间'
FROM `testtb`
AS FQ

-- ==========================================================

【需要结果】:

SELECT
    FQ.`id` AS '[`id`].ID',
   
    (CASE
        WHEN FQ.`pay`=1 THEN '1.启用'
        WHEN FQ.`pay`=2 THEN '2.禁用'
        WHEN FQ.`pay`=34 THEN '34.测试'        
    END) AS '是否启用',


    (CASE
        WHEN FQ.`sex`=1 THEN '1.男的'
        WHEN FQ.`sex`=2 THEN '2.女的'   
    END) AS '性别',


    FQ.`updated_at` AS '[`updated_at`].更新时间'
FROM `testtb`
AS FQ


论坛徽章:
0
2 [报告]
发表于 2020-12-17 18:30 |只看该作者
硬生生写了一个,给一个参考,等待其他好的结果出现
awk '
/pay|sex/{
   $0=gensub("[0-9]+"," &","g");
   split($3,js,".");
   print "\n(CASE";
   for(i=4;i<=NF;i++){
    split($i,t,"[.\047]");
        print "  WHEN",$1"="t[1]" THEN \047"t[1]"."t[2]"\047"
   }
   print "END) "$2" \047"js[2]"\047,";next
}1' file

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
3 [报告]
发表于 2020-12-18 08:08 |只看该作者
回复 2# cd_ly

好久不见,最近怎么样?

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
4 [报告]
发表于 2020-12-18 10:19 |只看该作者
回复 1# 花儿朵朵

  1. awk 'FNR==NR{t=t?t "\n" $0:$0;next}{if(gsub("[0-9]","&",$0)>=2) print t; else print $0}' file1 file
复制代码
用了两个文本看起来整洁点,file1l里面是要替换的内容。

论坛徽章:
0
5 [报告]
发表于 2020-12-27 21:07 |只看该作者
回复 3# ll104567

好久不见,最近一段时间有点小忙,平时只是周六日偶尔登录CU刷刷习题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP