sed 应用

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 应用)