1. awk 变量
1.1. awk 内部变量
$0
当前处理行的所有记录$1,$2,$3...$n
文件中每行以间隔符号分割的不同字段NF
当前记录的字段数(列数)$NF
最后一列FNR/NR
行号FS
定义间隔符OFS
定义输出字符分隔符,默认空格RS
输入记录分隔符,默认换行ORS
输出记录分隔符,默认换行
1.2. awk 内部变量举例
1.2.1. 案例数据
# chen @ localhost in ~/Shell [17:25:59]
$ cat -n passwd
1 root:x:0:0:root:/root:/bin/zshi
2 cccccccccccccccccccbbbbbbbbbbbbbbb:aa
3 in:x:1:1:bin:/bin:/sbin/nologin
4 ddaemon:x:2:2:daemon:/sbin:/sbin/nologin
5 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
1.2.2. 输出 passwd
文件中所有行
# chen @ localhost in ~/Shell [17:51:07]
$ awk '{print $0}' passwd
root:x:0:0:root:/root:/bin/zshi
cccccccccccccccccccbbbbbbbbbbbbbbb:aa
in:x:1:1:bin:/bin:/sbin/nologin
ddaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
1.2.3. 输出 passwd
文件中1至5行
# chen @ localhost in ~/Shell [17:52:34]
$ awk 'NR==1,NR==5 {print $0}' passwd
root:x:0:0:root:/root:/bin/zshi
cccccccccccccccccccbbbbbbbbbbbbbbb:aa
in:x:1:1:bin:/bin:/sbin/nologin
ddaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
1.2.4. 输出 passwd
文件中1,5行
# chen @ localhost in ~/Shell [17:55:10]
$ awk 'NR==1 || NR==5 {print $0}' passwd
root:x:0:0:root:/root:/bin/zshi
adm:x:3:4:adm:/var/adm:/sbin/nologin
1.2.5. 输出 passwd
文件中每行第一列,倒数第一列,倒数第二列
# chen @ localhost in ~/Shell [17:59:57]
$ awk -F: '{print $1, $NF, $(NF-1)}' passwd
root /bin/zshi /root
cccccccccccccccccccbbbbbbbbbbbbbbb aa cccccccccccccccccccbbbbbbbbbbbbbbb
in /sbin/nologin /bin
ddaemon /sbin/nologin /sbin
adm /sbin/nologin /var/adm
sync /bin/sync /sbin
shutdown /sbin/shutdown /sbin
1.2.6. 输出 passwd
文件中每行的列数
# chen @ localhost in ~/Shell [18:00:52]
$ awk -F: '{print NF}' passwd
7
2
7
7
7
7
7
1.2.7. 输出 passwd
文件中包含adm
的第一列
# chen @ localhost in ~/Shell [18:03:05]
$ awk -F: '/adm/{print $1}' passwd
adm
1.2.8. 以@@@为分隔符,输出 passwd
文件中的第一列和最后一列
# chen @ localhost in ~/Shell [18:07:29]
$ awk -F: 'BEGIN {OFS="@@@"} {print $1,$NF}' passwd
root@@@/bin/zshi
cccccccccccccccccccbbbbbbbbbbbbbbb@@@aa
in@@@/sbin/nologin
ddaemon@@@/sbin/nologin
adm@@@/sbin/nologin
sync@@@/bin/sync
shutdown@@@/sbin/shutdown
# 方法2
# chen @ localhost in ~/Shell [18:08:26] C:1
$ awk 'BEGIN {FS=":";OFS="@@@"} {print $1,$NF}' passwd
# 方法3
# chen @ localhost in ~/Shell [18:08:51]
$ awk 'BEGIN {FS=":"} {print $1"@@@"$NF}' passwd
1.3. awk 工作原理
- awk 使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符 (RS) 结束。
- awk 使用 print 函数打印字段,打印出来的字段会以空格分隔,因为$1,$3之间有一个逗号。逗号比较特殊,它映射为输出字段分隔符OFS(内部变量),OFS默认为空格。
- awk 处理完一行后,将从文件中获取另一行,并将其保存在 $0 中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕。
来源:CSDN
作者:小丑先生呀
链接:https://blog.csdn.net/weixin_45080984/article/details/103677742