2017-11-21 00:00:09: 现在最前,吐槽一下,现在baidu上搜点东西,清一色的抄袭文章,真是受不了,自己写一个记录一下吧!还得翻墙上gg!

什么是gensub?

gensub是LINUX字符处理函数之一,不是那么的常见,但是却非常的好用的简便。在处理日志等场景中,往往显得非常的优雅

几个例子

案例1

替换某字符串中的第某个字符为新字符

echo 'xxxx' awk '{print $0=gensub("x","1","4")}'
xxx1

ecgo 'xxxx' awk '{pring $0=gensub("x","1","g")}'
1111
案例2

替换处理文本格式

more interst_obj_to_tag.log 
孕妇:孕妇,产妇,补锌,补硒,补铁,补钙,补碘
宝宝餐:婴幼儿,婴儿(6-8个月),婴儿(8-10个月)
养生:养发,健脾养胃,提高免疫
食疗:疾病
养颜:美白,排毒养颜,紧致肌肤,祛痘祛斑
减肥:减肥瘦身
素食:素食者
新手:新手菜
汤:汤
烘焙:烘焙
辣:辣
海鲜:海鲜
酸甜:酸甜
清淡:清淡

现在需要将单行变换为多行,例如第一行,转换为:

孕妇:孕妇
孕妇:产妇
孕妇:补锌
孕妇:补硒
孕妇:补铁
孕妇:补钙
孕妇:补碘

函数写法

$ more handle_obj_to_tag.sh 
#!/bin/sh
cat interst_obj_to_tag.log | awk -F ':' '
{
        area=gensub(/省|市|自治区|壮族|维吾尔族|回族/,"","g",$1);
        tags=$2","$3","$4","$5","$6","$7;
        n=split(tags,tag,",")
        for(i=1;i<=n;i++){
                if(tag[i]!=""){
                        print area","tag[i]",interest";
                }
        }

}'>data_obj_tag.log

新文件:

孕妇,孕妇,interest
孕妇,产妇,interest
孕妇,补锌,interest
孕妇,补硒,interest
孕妇,补铁,interest
孕妇,补钙,interest
孕妇,补碘,interest
宝宝餐,婴幼儿,interest
宝宝餐,婴儿(6-8个月),interest
宝宝餐,婴儿(8-10个月),interest
养生,养发,interest
养生,健脾养胃,interest
养生,提高免疫,interest
食疗,疾病,interest
养颜,美白,interest
...
Logo

更多推荐