文本处理 awk

可编程-->处理灵活,功能强大
1、awk行处理方式与格式
awk也是行处理方式,但是与sed不同的是,awk可以对每行进行切片处理。

This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
This is my goat, my goat's name is adam asd
awk -F ' ' '{print $1" : " $2}' test.log
output
This : is
This : is
This : is
This : is
-
$0表示当前行
-
$1表示每行的第一个字段
-
$2表示每行的第一个字段
-
-F ':'指定的是:未分隔符,默认是空格是分隔符
-
NR:每行的记录号
-
NF:字段数量变量
-
FILENAME: 正在处理的文件名


BEGIN 和 END
head /etc/passwd | awk -F ':' 'BEGIN {print "用户\t目录"} {printf("%7s %s \n", $1, $7)}'
output
用户 目录
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
awk工作流程是这样的:先执行BEGING,然后读取文件先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,\(0则表示所有域,\)1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
ls -l | awk 'BEGIN{size=0} {print $0;size+= $5 } END{print "size is " size}'
total 280
drwxr-xr-x 3 root root 4096 May 20 21:36 IdeaProjects
drwxr-xr-x 2 root root 4096 Jun 1 00:19 logs
-rw-r--r-- 1 root root 176743 Jun 1 11:47 null
-rw-r--r-- 1 root root 73139 Jun 2 10:17 shadowsocksR.log
-rwxr-xr-x 1 root root 16220 Jun 2 10:14 shadowsocksR.sh
size is 274294
逻辑判断式

$ cat ~/.ssh/known_hosts | awk -F ' ' '$1~/^github.*/{print $1}'
github.com,13.250.177.223
~:匹配正则表达式,!~:匹配正则表达式并取反。
cat /etc/passwd | awk -F ":" '$1~/^root/{print $0}'
cat /etc/passwd | awk -F ":" '$1 !~ /^root/{print $0}' | head -n 4
netstat -anp | awk '$6 ~/CONNECTED|LISTEN/ {sum[$6]++} END {for (i in sum) print i , sum[i]}'
LISTEN 7
CONNECTED 82
