美文网首页
sed 应用

sed 应用

作者: 断水流大师兄vs魔鬼筋肉人 | 来源:发表于2018-05-02 21:33 被阅读0次

    awk '{print $1,$4}' test.txt  查看第一列和第四列

    awk '{printf "%-8s %-10s %-20s %-15s\n",$1,$3,$5,$6}'  test   查看1  3  5 6 列 并打印出间距格式(格式化输出)

    过滤记录:awk '$3==0 && $6=="LISTEN"'   test

    选出第3列值为0并且第6列值为"LISTEN"

    awk '$3>0 {print $0}' test   第3列值大于0的,$0---整行

    awk '$3==0 && $6=="LISTEN"  || NR==1'   test      NR表头==1  第一行

    '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' test    加格式化输出

    说到了内建变量,我们可以来看看awk的一些内建变量:

    $0当前记录(这个变量中存放着整个行的内容)

    $1~$n当前记录的第n个字段,字段间由FS分隔

    FS输入字段分隔符 默认是空格或Tab

    NF当前记录中的字段个数,就是有多少列

    NR已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。

    FNR当前记录数,与NR不同的是,这个值会是各个文件自己的行号

    RS输入的记录分隔符, 默认为换行符

    OFS输出字段分隔符, 默认也是空格

    ORS输出的记录分隔符,默认为换行符

    FILENAME当前输入文件的名字

    指定分隔符: awk 'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd   =root    0       /root

    bin     1       /bin

    daemon  2       /sbin

    adm     3       /var/adm

    lp      4       /var/spool/lpd

    sync 5       /sbin

    root 0 /root

    bin 1 /bin

    daemon 2 /sbin

    adm 3 /var/adm

    lp 4 /var/spool/lpd

    sync 5 /sbin

    shutdown 6 /sbin

    halt 7 /sbin

    awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd

    root    0       /root

    bin     1       /bin

    daemon  2       /sbin

    adm     3       /var/adm

    lp      4       /var/spool/lpd

    sync 5       /sbin

    awk -F '[;:]'  如果你要指定多个分隔符,你可以这样来:

    awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

    第6列中带有“FIN”的列,加首列原本行号,排列格式

    awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

    上面的第一个示例匹配FIN状态, 第二个示例匹配WAIT字样的状态。其实 ~ 表示模式开始。/ /中是模式。这就是一个正则表达式的匹配。

    我们可以使用 “/FIN|TIME/” 来匹配 FIN 或者 TIME :

    awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

    再来看看模式取反的例子: awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

    相关文章

      网友评论

          本文标题:sed 应用

          本文链接:https://www.haomeiwen.com/subject/snfhrftx.html