Linux 中的 gawk 命令和示例
Linux 中的gawk命令用于模式扫描和处理语言。 awk 命令无需编译,允许用户使用变量、数字函数、字符串函数和逻辑运算符。它是一个实用程序,使程序员能够以语句的形式编写微小而有效的程序,这些语句定义了文本文档中要搜索的文本模式以及在一行中找到匹配项时要采取的操作。
gawk 命令可用于:
- 逐行扫描文件。
- 将每个输入行拆分为字段。
- 将输入行/字段与模式进行比较。
- 在匹配的行上执行操作。
- 转换数据文件。
- 生成格式化报告。
- 格式化输出行。
- 算术和字符串操作。
- 条件和循环。
句法:
gawk [POSIX / GNU style options] -f progfile [--] file ...
gawk [POSIX / GNU style options] [--] 'program' file ...
一些重要选项:
- -f progfile, –file=progfile:从文件 program-file 中读取 AWK 程序源,而不是从第一个命令行参数中读取。可以使用多个 -f(或 –file)选项。
- -F fs, –field-separator=fs:它使用 FS 作为输入字段分隔符(FS 预定义变量的值)。
- -v var=val, –assign=var=val:在程序开始执行之前,将值val分配给变量var 。
例子:
- -F:它使用 FS 作为输入字段分隔符(FS 预定义变量的值)。
gawk -F: '{print $1}' /etc/passwd
- -f:从文件 program-file 中读取 AWK 程序源,而不是从第一个命令行参数中读取。可以使用多个 -f(或 –file)选项。
gawk -F: -f mobile.txt /etc/passwd
一些内置变量:
- NR:它保持输入行数的当前计数。
- NF:它保持当前输入记录中字段数的计数。
- FS:它包含字段分隔字符,用于分隔输入行上的字段。
- RS:存储当前记录分隔字符。
- OFS:它存储输出字段分隔符,它在 awk 打印它们时分隔字段。
- ORS:存储输出记录分隔符,当Awk打印输出行时将它们分隔开。
例子:
- NR:
gawk '{print NR "-" $1 }' mobile.txt
- 回复:
gawk 'BEGIN{FS=":"; RS="-"} {print $1, $6, $7}' /etc/passwd
- 开放时间:
gawk 'BEGIN{FS=":"; OFS="-"} {print $1, $6, $7}' /etc/passwd
示例更多命令示例:
- 将以下示例文本文件视为以下所有情况的输入文件。
要创建文本文件:
cat > mobile.txt
- gawk 的默认行为:默认情况下,gawk 打印指定文件中的每一行数据。
gawk '{print}' mobile.txt
- 要打印与给定模式匹配的行:
gawk '/Sunil/ {print}' mobile.txt
在上面的例子中, gawk 命令打印了所有与“Sunil”匹配的行。
- 将一行拆分为字段:对于每一行,gawk 命令默认拆分由空格字符分隔的记录,并将其存储在 $n 变量中。如果该行有 3 个单词,它将分别存储在 $1、$2 和 $3 中。 $0 代表整行。
gawk '{print $2}' mobile.txt
在上面的例子中,$2 代表 Monile 号。场地。
- 显示行数:
gawk '{print NR, $0}' mobile.txt
- 要查找文件中存在的最长行的长度:
gawk '{ if (length($0) > max) max = length($0) } END { print max }' mobile.txt
- 要计算文件中的行数:
gawk 'END { print NR }' mobile.txt
- 要打印超过 5 个字符:
gawk 'length($0) > 5' mobile.txt
笔记:
- 要查看 gawk 命令的手册页,请使用以下命令:
man gawk
- 要查看 gawk 命令的帮助页面,请使用以下命令:
gawk --help