zoukankan      html  css  js  c++  java
  • 正则表达式awk

    以冒号: 为分隔符打印出来;打印第一段$1;  -F 分隔符

    [root@localhost awk]# awk -F ':' '{print $1}' test.txt 

    root

    bin

    daemon

    adm

    lp

    sync

    打印所有的段$0

    [root@localhost awk]# awk -F ':' '{print $0}' test.txt 

    打印出文件内容:

    [root@localhost awk]# awk '{print $0}' test.txt 

    以空格分开,打印出第一段

    [root@localhost awk]# cat 1.txt 

    adossad  dshj

    sds

    2323 89809 

    dsadsd

    [root@localhost awk]# awk '{print $1}' 1.txt 

    adossad

    sds

    2323

    dsadsd

    打印出多个段,以冒号:分开,打印出第一段$1,第二段$2,第三段$3

    [root@localhost awk]# awk -F ':' '{print $1,$2,$3}' test.txt 

    root x 0

    bin x 1

    daemon x 2

    adm x 3

    lp x 4

     

    多段显示以井号分开显示:

    [root@localhost awk]# awk -F ':' '{print $1"#",$2"#",$3"#"}' test.txt 

    root# x# 0#

    bin# x# 1#

    daemon# x# 2#

    adm# x# 3#

    lp# x# 4#

    sync# x# 5#

    匹配并列出oo字符串的行

    [root@localhost awk]# awk '/oo/'  test.txt 

    root:x:0:0:root:/root:/bin/bash

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    operator:x:11:0:operator:/root:/sbin/nologin

    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

     

    匹配第一段,oo字符串,

    [root@localhost awk]# awk -F ':' '$1~ /oo/'  test.txt 

    root:x:0:0:root:/root:/bin/bash

    同样awk也支持正则表达式

    匹配以冒号分割的第一段 有o+的字符串  加号表示一个或多个字符

    [root@localhost awk]# awk -F ':' '$1 ~ /o+/' test.txt 

    root:x:0:0:root:/root:/bin/bash

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    operator:x:11:0:operator:/root:/sbin/nologin

    nobody:x:99:99:Nobody:/:/sbin/nologin

    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

    polkitd:x:999:997:User for polkitd:/:/sbin/nologin

     

    匹配第一段和第三段 (以冒号分割)有root字符串的  以及匹配第一段第三段和第四段有xiaobo字符串的

    [root@localhost awk]# awk  -F ':' '/root/ {print $1,$3} /xiaobo/ {print $1,$3,$4}' test.txt 

    root 0

    operator 11

    xiaobo 1000 1000

    打印输出包含root 和xiaobo字符串的全部段行

    [root@localhost awk]# awk -F ':' '/root|xiaobo/ {print $0}' test.txt 

    root:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/root:/sbin/nologin

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    grep 查找root和xiaobo字符串的行

    [root@localhost awk]# grep -E 'root|xiaobo' test.txt 

    root:x:0:0:root:/root:/bin/bash

    operator:x:11:0:operator:/root:/sbin/nologin

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    以冒号分割,打印第三段式是0的行

    [root@localhost awk]# awk  -F ':' '$3==0' test.txt 

    root:x:0:0:root:/root:/bin/bash

    第三段是0,只打印第一段

    [root@localhost awk]# awk  -F ':' '$3==0 {print $1}' test.txt 

    root

    打印第三段>=1000的行

    [root@localhost awk]# awk  -F ':' '$3>=1000' test.txt 

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    打印全部$0

    [root@localhost awk]# awk  -F ':' '$3>=1000 {print $0}' test.txt 

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    打印第7段不是/sbin/nologin的字符串 

    [root@localhost awk]# awk  -F ':' '$7!="/sbin/nologin" {print $0}' test.txt 

    root:x:0:0:root:/root:/bin/bash

    sync:x:5:0:sync:/sbin:/bin/sync

    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    halt:x:7:0:halt:/sbin:/sbin/halt

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    打印出第三段<第四段的行

    [root@localhost awk]# awk -F ':' '$3<$4' test.txt 

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    games:x:12:100:games:/usr/games:/sbin/nologin

    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

    第三段等于第四段的行

    [root@localhost awk]# awk -F ':' '$3==$4' test.txt 

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    nobody:x:99:99:Nobody:/:/sbin/nologin

    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

    dbus:x:81:81:System message bus:/:/sbin/nologin

    postfix:x:89:89::/var/spool/postfix:/sbin/nologin

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    打印第三段大于5 并且第四段小于7

    [root@localhost awk]# awk -F ':' '$3>"5"&&$4<"7"' test.txt 

    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    halt:x:7:0:halt:/sbin:/sbin/halt

    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    打印第三段>1000 或者 第7段等于/sbin/nologin

    [root@localhost awk]# awk -F ':' '$3>1000||$7=="/sbin/nologin"' test.txt 

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    打印输出底三段大于1000 或者第7段 匹配/bash/字符的

    [root@localhost awk]# awk -F ':' '$3>1000||$7 ~/bash/' test.txt 

    root:x:0:0:root:/root:/bin/bash

    xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

    以#号分开,打印输出第3段>1000 或者第7段匹配/bash/的段,并输出第1段第3段第7段

    [root@localhost awk]# awk  -F ':' '{OFS="#"} $3>1000 || $7 ~ /bash/ {print $1,$3,$7}' test.txt 

    root#0#/bin/bash

    xiaobo#1000#/bin/bash

    if 第3段大于等于1000 打印第1,2,3,4段,以#号分割; OFS表示分割符

    [root@localhost awk]# awk -F ':' '{OFS="#"} {if ($3>=1000) {print $1,$2,$3,$4}}' test.txt 

    xiaobo#x#1000#1000

    OFS是print的时候,打印指定的分隔符;

    NR 表示行;

    NF表示段;

     

     

    打印所有的行

    [root@localhost awk]# awk -F ':' '{print NR ":"$0}' test.txt 

    1:root:x:0:0:root:/root:/bin/bash

    2:bin:x:1:1:bin:/bin:/sbin/nologin

    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin

    4:adm:x:3:4:adm:/var/adm:/sbin/nologin

    打印所有的段,就是以冒号分开,一行有多少段,前面的数字表示改行有几段

    [root@localhost awk]# awk -F ':' '{print NF ":"$0}' test.txt 

    7:root:x:0:0:root:/root:/bin/bash

    7:bin:x:1:1:bin:/bin:/sbin/nologin

    7:daemon:x:2:2:daemon:/sbin:/sbin/nologin

    7:adm:x:3:4:adm:/var/adm:/sbin/nologin

    7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    7:sync:x:5:0:sync:/sbin:/bin/sync

    7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    7:halt:x:7:0:halt:/sbin:/sbin/halt

    7:mail:x:

    8:12:mail:/var/spool/mail:/sbin/nologin

    打印前10行

     

    [root@localhost awk]# awk -F ':' 'NR<=10' test.txt 

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    sync:x:5:0:sync:/sbin:/bin/sync

    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

    halt:x:7:0:halt:/sbin:/sbin/halt

    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    operator:x:11:0:operator:/root:/sbin/nologin

     

     

     

     

    NR<=10打印前10行并且 $1第一段包含root字符或者sync字符的行

    [root@localhost awk]# awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt 

    root:x:0:0:root:/root:/bin/bash

    sync:x:5:0:sync:/sbin:/bin/sync

     

    打印一行中有7段并且$1第一段包含root或者sync字符的行

    [root@localhost awk]# awk -F ':' 'NF==7 && $1 ~ /root|sync/' test.txt 

    root:x:0:0:root:/root:/bin/bash

    sync:x:5:0:sync:/sbin:/bin/sync

    打印行和段;$NR这里理解为段,$NF一直是第7段

    第1段第7段

    第2段第7段

    ....

    ....($NR没东西了)第7段

    [root@localhost awk]# awk -F ':' '{print $NR ":" $NF}' test.txt 

    root:/bin/bash

    x:/sbin/nologin

    2:/sbin/nologin

    4:/sbin/nologin

    lp:/sbin/nologin

    /sbin:/bin/sync

    /sbin/shutdown:/sbin/shutdown

    :/sbin/halt

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/sbin/nologin

    :/bin/bash

    将前三行第一段全部赋值为root

    [root@localhost awk]# head -n 3 /etc/passwd  |awk -F ':' '$1="root"'

    root x 0 0 root /root /bin/bash

    root x 1 1 bin /bin /sbin/nologin

    root x 2 2 daemon /sbin /sbin/nologin

    列出前三行有root字符串的行

    [root@localhost awk]# head -n 3 /etc/passwd  |awk -F ':' '$1=="root"'

    root:x:0:0:root:/root:/bin/bash

     

     

    赋值的时候分隔符会没有,就可以定义一个分隔符 {OFS ":"}

    [root@localhost awk]# head -n 3 test.txt |awk -F ':' '{OFS ":"}''$1=="root"'

    root:x:0:0:root:/root:/bin/bash

     

     

     

    求文件test.txt每一行第三段所有的和 (第三段是一个数字) 以冒号分割,第三段

    [root@localhost awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt 

    3605

     

     

     

     

  • 相关阅读:
    实现类似“添加扩展程序…”的设计时支持
    为什么word2007写的文章不能显示在首页
    (翻译)LearnVSXNow!#4 创建一个带有工具窗的Package
    (翻译)LearnVSXNow!#1 如何开始VSX开发?
    测试Windows live writer 发日志
    (翻译)LearnVSXNow!#3 创建一个带有简单命令的Package
    styleSheetTheme和them
    (翻译)LearnVSXNow!#2 创建一个空的VS Package
    VS 2008 Package 备忘
    通用树形表查询SQL
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/8306918.html
Copyright © 2011-2022 走看看