[toc]
awk内置变量
$0
表示匹配的整行
文件 passwd.txt
内容如下
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
使用 $0
打印整行
$ awk '{print $0}' passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
NR
总的行号
文件 a.txt
内容如下
101,abc,CEO
102,def,CTO
103,qaz,COO
文件 b.txt
内容如下
666,ABC,CEO
777,DEF,CTO
888,QAZ,COO
NR
会统计多个文件的总行号
$ awk '{print NR,$0}' a.txt b.txt
1 101,abc,CEO
2 102,def,CTO
3 103,qaz,COO
4 666,ABC,CEO
5 777,DEF,CTO
6 888,QAZ,COO
FNR
当前文件的行号
FNR
只统计每个文件的行号
$ awk '{print FNR,$0}' a.txt b.txt
1 101,abc,CEO
2 102,def,CTO
3 103,qaz,COO
1 666,ABC,CEO
2 777,DEF,CTO
3 888,QAZ,COO
NF
文件最后一列
$ awk -F: '{print $NF}' /etc/passwd | head
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/usr/sbin/nologin
/usr/sbin/nologin
分隔符
-
record
字段 -
separator
分隔符
变量名 | 对应单词 | 含义 |
---|---|---|
FS | field separator | 字段分隔符,默认空格或 tab |
OFS | output field separator | 输出分隔符,默认空格 |
RS | record separator | 记录分隔符,默认换行符 \n |
ORS | output record separator | 输出记录分隔符 |
FS 指定字段分隔符
文件 passwd.txt
内容如下
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
- -F写法
- BEGIN {FS}写法
$ awk -F: '{print $1}' passwd.txt
root
bin
daemon
$ awk 'BEGIN{FS=":"}{print $1}' passwd.txt
root
bin
daemon
OFS 指定输出分隔符
文件 a.txt
内容如下
1 2 3
a b c
D F 6
示例:打印文件第一列和第三列,以冒号为分隔符
- -v OFS写法
- BEGIN {OFS}写法
注意
-v OFS
写法的一个坑:当 print $0
的时候,-v OFS
会不生效
$ awk -v OFS=: '{print $0}' a.txt
1 2 3
a b c
D F 6
解决方法是在 print$0
前加一个 $1=$1
$ awk -v OFS=: '{$1=$1;print $0}' a.txt
1:2:3
a:b:c
D:F:6
$ awk -v OFS=: '{print $1,$3}' a.txt
1:3
a:c
D:6
$ awk 'BEGIN{OFS=":"}{print $1,$3}' a.txt
1:3
a:c
D:6
RS 指定记录分隔符,即指定以什么为分隔符,默认为 \n
文件 passwd.txt
内容如下,文件默认以换行为记录分隔符
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
示例:将文件的记录分隔符指定为 /
,即指定文件以 /
为换行符
- -v RS写法
- BEGIN {RS}写法
$ awk -v RS=/ '{print $0}' passwd.txt
root:x:0:0:root:
root:
bin
bash
bin:x:1:1:bin:
bin:
sbin
nologin
daemon:x:2:2:daemon:
sbin:
sbin
nologin
$ awk 'BEGIN{RS="/"}{print $0}' passwd.txt
root:x:0:0:root:
root:
bin
bash
bin:x:1:1:bin:
bin:
sbin
nologin
daemon:x:2:2:daemon:
sbin:
sbin
nologin
ORS 指定输出记录分隔符
文件 a.txt
内容如下
1 2 3
a b c
D F 6
示例:将文件的输出记录分隔符指定为 /
- -v ORS写法
- BEGIN {ORS}写法
$ awk -v ORS="/" '{print $0}' a.txt
1 2 3/a b c/D F 6/
$ awk 'BEGIN{ORS="/"}{print $0}' a.txt
1 2 3/a b c/D F 6/