zoukankan      html  css  js  c++  java
  • Linux中awk的gsub函数用法

    一。遇到的问题:

    问题:echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'为啥 输出后 2011-11-22 变成 2 了?

    解答:
    gsub(/-/,"",$4)的值是2【在赋值的情况下是这样的~】,你将2赋值给$4 ,gsub返回的是替换的次数。
    如下是测试结果:
    [root@Test230 ~]# echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'
    a b c 2 a:d

    看另一种情况,只是替换的话~

    [root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"",$4)'
    a b c 20111122 a:d
    [root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"_",$4)'
    a b c 2011_11_22 a:d

    二。实例详解

    下面我们来总结一下这个gsub的用法:

    有一个文本文件data.test的内容如下:

    0001|20081223efskjfdj|EREADFASDLKJCV
    0002|20081208djfksdaa|JDKFJALSDJFsddf
    0003|20081208efskjfdj|EREADFASDLKJCV
    0004|20081211djfksdaa1234|JDKFJALSDJFsddf

    以'|'为分隔, 现要将第二个域字母前的数字去掉,其他地方都不变, 输出为:
    0001|efskjfdj|EREADFASDLKJCV
    0002|djfksdaa|JDKFJALSDJFsddf
    0003|efskjfdj|EREADFASDLKJCV
    0004|djfksdaa1234|JDKFJALSDJFsddf

    解法:

    awk -F '|'  '{sub(/[0-9]+/,"",$2);print $0}' data.test 

    三。sub和gsub的区别

    sub匹配第一次出现的符合模式的字符串,相当于 sed 's//'   
    gsub匹配所有的符合模式的字符串,相当于 sed 's//g'   

    awk的sub函数用法:
    sub函数匹配指定域/记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录,替换只发生在第一次匹配的时候。

    实例:
    $ awk '{ sub(/test/, "mytest"); print }' testfile
    $ awk '{ sub(/test/, "mytest", $1); print }' testfile
    第一个例子在整个记录中匹配,替换只发生在第一次匹配发生的时候。
    第二个例子在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候

    gsub函数作用如sub,但它在整个文档中进行匹配。        

    实例:
    $ awk '{ gsub(/test/, "mytest"); print }' testfile
    $ awk '{ gsub(/test/, "mytest", $1); print }' testfile
    第一个例子在整个文档中匹配test,匹配的都被替换成mytest。
    第二个例子在整个文档的第一个域中匹配,所有匹配的都被替换成mytest。


    只有当记录中的域有改变的时候 ,指定0FS变量才有用, 如果记录中的域无变化, 指定OFS产生不了实际效果。

    awk -F'|' -v OFS='|' '{ gsub(/[0-9]/, "", $3); print $0; }' data.txt   

    将把第三个域中所有数字都去掉。

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/Linux-guowen/p/12659776.html
Copyright © 2011-2022 走看看