语法格式
awk [参数] ‘条件{动作}’ 文本 ...
核心作用:
(1)取列
附加作用:
(1)删、查
【参数】
-F 指定字段分隔符
变量名 | 属性 |
$n | 当前记录的第n个列,字段间由FS或-F参数指定分隔符 |
$0 | 当前整行记录 |
NF | 当前记录中的列的个数,就是有多少列 |
$(NF-n) | 倒数第n列,n为数字 |
NR | 已经读出的记录数,就是行号,从1开始 |
默认分隔符是空格:第2列的00
11 00 22
第1列 用$1表示
第2列 用$2表示
第3列 用$3表示
练习:
(1)打印不同的列
[root@qulan ~]# echo 00 11 22 >a.txt
[root@qulan ~]# cat a.txt
00 11 22
[root@qulan ~]# awk '{print $1}' a.txt
00
[root@qulan ~]# awk '{print $2}' a.txt
11
[root@qulan ~]# awk '{print $3}' a.txt
22打印多列:
[root@qulan ~]# awk '{print $1,$2}' a.txt
00 11
(2)打印行
(3)打印列
[root@qulan ~]# awk '{print $NF}' a.txt #打印最后一列
22[root@qulan ~]# awk '{print $(NF-1)}' a.txt #打印倒数第二列
11
准备好测试文件,取passwd文件前五行
sed -n '1,5p' /etc/passwd > test.txt
问题1:取test.txt文件的第2行到第3行的内容
问题2:过滤出含有root字符串的行
问题3:删除含有root字符串的行
sed -i.bak '/root/d' test.txt
问题4:取文件的第一列、第三列和最后一列内容,并打印行号
问题5:取出Linux中执行ifconfig eth0后顶一顶的IP地址(只能输出IP地址)
取出两个 IP
多分隔符
练习:
1、用awk取stat /etc/hosts结果的644
先取行,再取列
带条件的awk: