awk常用基本命令
代码语言:javascript复制awk [选项] '脚本命令' 文件名
默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段:
- $0 代表整个文本行;
- $1 代表文本行中的第 1 个数据字段;
- $2 代表文本行中的第 2 个数据字段;
- $n 代表文本行中的第 n 个数据字段。
1.我们要获取data2.txt的第一列,如下操作
代码语言:javascript复制[root@localhost test]# cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.
[root@localhost test]# awk '{print $1}' data2.txt
One
Two
Three
默认情况下awk的默认分隔符是空白字符,当然我们也可以指定分割字符
- -F ,指定分割符号
2.我们要把data3.txt,按照|进行分割,获取第一列,进行打印
代码语言:javascript复制[root@localhost test]# cat data3.txt
wangwu0|nan|18
wangwu1|nan|18
wangwu2|nan|18
[root@localhost test]# awk -F "|" '{print $1}' data3.txt
wangwu0
wangwu1
wangwu2
往往使用awk的时候,可以读取文件执行命令
- -f,指定文件,读取文件的命令然后执行
3.我们要把data3.txt按照|进行分割 ,然后读取第一列和第三列 打印
代码语言:javascript复制[root@localhost test]# cat data3.txt
wangwu0|nan|18
wangwu1|nan|18
wangwu2|nan|18
[root@localhost test]# cat awk.sh
{print $1 " is age :" $3}
[root@localhost test]# awk -F "|" -f awk.sh data3.txt
wangwu0 is age :18
wangwu1 is age :18
wangwu2 is age :18
有时候,我们在处理数据之前要做一些额外的操作
- BEGIN : 会强制 awk 在读取数据前执行该关键字后指定的脚本命令
4.我们在处理打印data3.txt之前打印一句话
代码语言:javascript复制[root@localhost test]# awk 'BEGIN{print "this is data2 context"} {print $0}' data3.txt
this is data2 context
wangwu0|nan|18
wangwu1|nan|18
wangwu2|nan|18
当然,处理数据之后,也可能做一些额外的操作
- END:和 BEGIN 关键字相对应,END 关键字允许我们指定一些脚本命令,awk 会在读完数据后执行它们
5.我们处理打印data3.txt之后,打印一句话
代码语言:javascript复制[root@localhost test]# awk '{print $0} END {print "end of file"}' data3.txt
wangwu0|nan|18
wangwu1|nan|18
wangwu2|nan|18
end of file