Linux 命令实战(四)

2023-02-23 17:23:51 浏览数 (1)

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

0 人点赞