Linux三剑客awk知识
- 1. awk 介绍
- 2. awk 语法
- 3. 练习
1. awk 介绍
- awk 是一门语言, 也是一个命令,
- Linux 有三剑客命令: grep/sed/awk
- 三剑客的特长 - grep 过滤内容
- sed 取行
- awk 取列
 
2. awk 语法
- 取列 - 取第一列文件($1): awk '{print $1} 文件'
- 指定分隔符为文件: awk -F "指定的分隔符" 文件
- 指定多分隔符: awk -F "[/@ #]+" '{print $1,$2}' 文件
 
- 取第一列文件($1): 
- 取行: awk NR==2 oldboy.txt
- 过滤: awk '/过滤的内容/' 文件
3. 练习
-  准备:创建一个文件, 并在只其中追加内容 [root@oldboyedu ~] echo "oldboy oldgirl" >>oldboy.txt [root@oldboyedu ~] echo "oldboy oldgirl" >>oldboy.txt [root@oldboyedu ~] cat oldboy.txt oldboy oldgirl oldboy oldgirl
-  普通取列 - 取第一列[root@oldboyedu ~] awk '{print $1}' oldboy.txt oldboy oldboy
- 取整行(搭配着grep可能更好用)[root@oldboyedu ~]# awk '{print $0}' oldboy.txt oldboy oldgirl oldboy oldgirl
 
- 取第一列
-  指定分隔符取列(-F) - 取/etc/passwd的第1列: awk -F ":" '{print $1}' /etc/passwd
- 取/etc/passwd的第2列: awk -F ":" '{print $2}' /etc/passwd
- 取/etc/passwd的尾列: awk -F ":" '{print $NF}' /etc/passwd
- 取/etc/passwd的倒数第2列: awk -F ":" '{print $(NF-1)}' /etc/passwd
 
- 取/etc/passwd的第1列: 
-  同时输出多列 - 取/etc/passwd的第1列和第2列: awk -F ":" '{print $1,$2}' /etc/passwd
- 取/etc/passwd的第1列、第3列和最后一列: awk -F ":" '{print $1,$3,$NF}' /etc/passwd
 
- 取/etc/passwd的第1列和第2列: 
-  综合练习 - 从ip a或ifconfig结果中取出Ip地址 p a|grep '10.0.0'|awk '{print $2}'|awk -F/ '{print $1}'或者ifconfig eth0|grep '10.0.0'|awk '{print $2}'
- 从ip a结果中取出Ip地址: ip a|awk -F "[ /]+" 'NR==9{print $3}'
- 取出stat /etc/hosts中的0644: stat /etc/hosts|awk -F "[(/]" 'NR==4{print $2}'
 
- 从ip a或ifconfig结果中取出Ip地址 
-  准备 [root@oldboyedu ~] seq 5 >oldboy.txt [root@oldboyedu ~] cat oldboy.txt 1 2 3 4 5
-  取行练习 - 取第二行: awk NR==2 oldboy.txt
- 取第2-4行: awk NR==2,NR==4 oldboy.txt或awk 'NR>1&&NR<5' oldboy.txt或awk 'NR>=2&&NR<=4' oldboy.txt
 
- 取第二行: