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
- 取第二行: