gawk
1.1、gawk简介
是什么 ?:the GNU implementation of awk
开发语言:C
官方主页:http://www.gnu.org/software/gawk
1.2、通过包管理器安装gawk
操作系统包管理器安装命令
Windowsscoopscoop install gawk
WindowsChocolateychoco install -y gawk
macOSHomeBrewbrew install gawk
GNU/LinuxLinuxBrewbrew install gawk
aptsudo apt-get install -y gawk
CentOSyumsudo yum install -y gawk
dnfsudo dnf install -y gawk
openSUSEzyppersudo zypper install -y gawk
Alpine Linuxapksudo apk add gawk

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm gawk
Gentoo LinuxPortagesudo emerge gawk
1.3、通过编译源码安装gawk 

step1、安装依赖

下载时cURL
解压时tarxz
编译时POSIX shGNU CoreUtilsGNU makeGCC ( gcc )   | LLVM / Clang
运行时
  • glibc ( libc.solibm.solibdl.sold-linux-x86-64.so )
  • readline ( libreadline.so )
  • ncurses ( libtinfow.so )

step2、使用curl命令下载gawk源码包 (

curl -LO https://mirrors.tuna.tsinghua.edu.cn/gnu/gawk/gawk-5.0.0.tar.xz

step3、使用tar解压gawk源码包

tar vxf gawk-5.0.0.tar.xz

step4、进入gawk-5.0.0目录,并查看它的内容

step5、配置、编译、安装

./configure && make && sudo make install
1.4、awk命令

awk命令的使用格式:

awk [-F CHAR | -v var=value] 'awkProgramString' <FILE>...
awk [-F CHAR | -v var=value] -f awkProgramFile    <FILE>...

你可以把awk命令看作是类似于pythonrubyperlnode等脚本解释器。脚本可以以字符串直接传给解释器,也可以把脚本写在文件中,以文件的形式传给解释器

1.4.1、awk -h | --help

打印出awk命令的使用帮助。

此选项是gawk自己扩展的,不符合POSIX标准。

1.4.2、awk -V | --version

打印出awk命令的版本信息。

此选项是gawk自己扩展的,不符合POSIX标准。

1.4.3、awk [-F CHAR | -v var=value] 'awkProgramString' <FILE>...

awkProgramString最好被单引号包裹,如果使用双引号,里面的很多字符需要做转义

示例:

echo "a b c\nd e f" | awk '{print $1}'

解释:这里是调用了awk的内置函数print打印出每行中按照空格分割开之后的第一个field的内容。

运行效果如下:

1.4.4、awk [-F CHAR | -v var=value] -f awkProgramFile <FILE>...

对于简单的需求,我们可以直接把awkProgramString写在命令行里, 但是如果特别复杂的需求,直接写在命令行里就不方便了,所以,你也可以像其他语言一样, 把这些语句写到一个文件中,然后使用-f awkProgramFile参数指定awk源文件路径即可。

awk源文件的后缀名一般为.awk

示例:

awk -f program.awk yy.txt
1.4.5、-F <CHAR>

FField Seperator的首字母。意思为Field的分隔符。

awk命令是逐行处理文件的。把每一行按照-F参数指定的字符进行分割,分割出的每一块就是一个Field

如果没有指定-F参数,awk默认以空格作为分隔符。

示例:

echo "a/b/c\nd/e/f" | awk -F/ '{print $1}'

运行效果如下:

打印出分割后的第二个分割字符串。

1.4.6、-v <var=value>

vvariable的首字母。

-v参数用于定义变量

-v参数可以出现多次。

示例:

echo "a/b/c\nd/e/f" | awk -v FS=/ '{print $1}'
echo "a/b/c\nd/e/f" | awk 'BEGIN{FS="/"} {print $1}'

实际上。-F参数本质上就是定义了FS变量。