Skip to content

介绍

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 进行分析处理。

语法

awk [options] '/pattern1/ {action1} /pattern2/ {action2}...' filename

pattern 表示 awk 在数据中查找的内容,即匹配模式。 action 表示查找匹配内容时所执行的一系列命令

options

  • -F

    指定输出文件分隔符,默认为空格。

  • -v

    赋值一个用户定义变量

示例

搜索 passwd 文件中以 root 关键字开头的所有行,并输出该行的第 7 列 cat /etc/passwd | grep ^root | cut -d ":" -f 7 cat /etc/passwd | awk -F ":" '/^root/ {print $7}'

搜索 passwd 文件中以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列, 中间以 , 分割。 cat /etc/passwd | awk -F ":" '/^root/ {print $1","$7}'

搜索 passwd 文件中以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列, 中间以 , 分割,并在所有行前面添加 "user,shell",在最后一行后面添加 "foo, bar"。 cat /etc/passwd | awk -F ":" 'BEGIN{print "user, shell"} /^root/ {print $1","$7} END{print "foo, bar"}'

将 passwd 文件中的用户 id 值增加 1 并输出 cat /etc/passwd | awk -F ":" '{print $3+1}' cat /etc/passwd | awk -v i=1 -F ":" '{print $3+i}'

内置变量

  • FILENAME

    文件名

  • NR

    已读的记录数(行号)

  • NF

    浏览记录的域的个数(切割后,列的个数)

awk -F ":" '{print "文件名: "FILENAME " 行号: " NR " 列数: " NF}' /etc/passwd