awk命令

awk

参考资料:http://www.zsythink.net/archives/tag/awk

命令结构

awk命令结构:awk [options] 'BEGIN{ statements1 } {statements2} END{ statement3 }' filename

BEGIN后面的statement1是在读取文件之前的操作; statment2是每次读取filename文件中的一行都要执行的操作; END后面的statment3是读取完整个文件后的操作;

awk变量

内置变量

  • FS:输入字段分隔符, 默认为空白字符
  • OFS:输出字段分隔符, 默认为空白字符
  • RS:输入记录分隔符(输入换行符), 指定输入时的换行符
  • ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
  • NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
  • NR:行号,当前处理的文本行的行号。
  • FNR:各文件分别计数的行号(awk可以传入多个文件)
  • FILENAME:当前文件名
  • ARGC:命令行参数的个数
  • ARGV:数组,保存的是命令行所给定的各参数

自定义变量

使用-v name=value来创建自定义变量,可以在{ statement }中使用。

awk分隔符

awk命令可以指定输入分隔符FS和输出分隔符PFS:

  • 输入分隔符:awk逐行处理文本的时候,默认使用空格将一行文本切割成多个片段。可以通过-v FS=str来设置输入分割符为str。例如:
1
2
3
4
5
6
[root@centos7 wwd]#awk '{print $1,$2,$3}' aaa.txt
111 222 333
aaa bbb ccc
[root@centos7 wwd]#awk -v FS='222' '{print $1,$2,$3}' aaa.txt
111  333
aaa bbb ccc
  • 输入分隔符:使用逗号分割输出每一列(即’print $1,$2,$3’)的时候,awk默认使用空格分隔。可以通过-v OFS=str来设置输出分割符为str。例如:
1
2
3
4
5
6
[root@centos7 wwd]#awk '{print $1,$2,$3}' aaa.txt
111 222 333
aaa bbb ccc
[root@centos7 wwd]#awk -v OFS='---' '{print $1,$2,$3}' aaa.txt
111---222---333
aaa---bbb---ccc