一篇文章入门Unix中的AWK命令!

语言: CN / TW / HK

AWK Command in Unix

Unix中的AWK命令简介

Unix Shell脚本中的AWK命令是用来改变数据的形式和生成报告的。我们可以使用数字函数、逻辑运算符、变量和字符串函数来处理数据,而无需编译。AWK命令通常用于处理数据和扫描文件中的模式。它试图扫描一个或多个文件,检查其是否包含与所需的指定模式相匹配的模式,最后对其进行所需的操作。AWK命令是由三个人的名字首字母命名的--Aho、Weinberger和Kernighan。他们来自AT&T贝尔实验室,也在Unix Shell脚本中贡献了许多其他命令行提示。

AWK命令用于执行以下操作

  • 定义变量。
  • 使用数字函数或逻辑/算术运算符、变量或字符串。
  • 应用循环或控制流动作。
  • 生成报告。

AWK命令的基本语法

awk [options] [program] [file]

我们可以通过AWK命令做什么?

以下是在Unix中我们可以用AWK命令进行的操作列表。

  • AWK命令最初试图逐行扫描一个文件。
  • 将每个输入文件划分为与模式相匹配的字段。
  • 然后,它试图将输入的文件与指定的模式进行比较。
  • 最后,对匹配的行进行操作。

AWK命令用于转换数据文件,然后从中生成报告。它还用于对其进行算术或逻辑运算,以找出匹配的模式。

AWK命令用于执行以下操作。

  • 定义变量。
  • 使用数字函数或逻辑/算术运算符、变量或字符串。
  • 应用循环或控制流操作。
  • 生成报告。

AWK的语法。

awk [options] [selection action] [input_file]

如何在Unix中使用AWK命令的例子

让我们考虑有一个名为 "testing.txt "的文件,该文件的内容如下。

代码

cat testing.txt

输出

AWK Command in Unix 1

例子#1 - 选项 "print"。

为了打印文件中的所有内容,awk帮助打印文件中的所有内容行。在下面的例子中,我们没有使用任何模式,所以动作适用于文件中的行。默认情况下,没有任何模式参数的动作将打印文件中的全部数据/行。因此,我们可以看到,下面文件中的所有行都被打印出来了。

语法

awk '{print}' file_name.txt

代码

awk '{print}' testing.txt

输出

AWK Command in Unix 2

例子 #2 - 模式匹配。

要打印文件中的指定模式,我们可以使用下面的语法。它将列出输入参数中的匹配模式,并在输出中列出数据。

语法

awk '/pattern/ {print}' file_name.txt

代码

awk '/student/ {print}' testing.txt

输出

Pattern match

例子 #3 - 分行到字段。

我们也可以用空白作为默认的分隔符来分割行中的记录。例如,如果我们在一行中有4个字,它将分别被存储为1、2、3和4,而0美元将打印完整的一行。

语法

awk '{print $n, $m}' file_name.txt

代码

awk '{print $2, $4}' testing.txt

输出

Splitting lines to fields

变量 Unix中的内置AWK命令

  • NF:带有NF变量的AWK命令用于计算所传递的输入参数中的字段数量。
  • RS。带RS的AWK命令用于存储当前输入参数中的记录分隔符。默认情况下,如果没有提到指定的变量,新的一行被认为是记录分隔符。
  • NR:AWK命令及其变量NR有助于计算输入记录的数量。一般来说,行被认为是记录。
  • FS:使用FS命令时,我们需要指定字段分隔符。默认情况下,如果没有提到具体的分隔符,空白被认为是分隔符。它用于根据输入行来划分字段。
  • ORS:带有OFS变量的AWK命令用于存储输出记录分隔符,该分隔符被AWK命令用来打印输出行。新行字符被视为默认的记录分隔符。
  • OFS:带有OFS变量的AWK命令用于存储AWK打印输出时的输出字段分隔符。空格字符被当作默认的字段分隔符。

AWK命令中变量的例子

下面是提到的例子。

例子#1 - 变量NF.

当我们想打印文件中记录的最后一行时,我们可以使用带有变量NF的awk命令。

语法

awk '{print $NF}' file_name.txt

代码

awk '{print $NF}' testing.txt

输出

Variable NF

例子#2 - 变量NR。

AWK命令及其变量NR有助于计算输入记录的数量。一般来说,行被认为是记录。

语法

awk '{print $NR <file separator> $n}' file-name.txt

代码

awk '{print NR "-" $2}' testing.txt

输出

AWK Command in Unix 6

例子#3 - 变量OFS。

AWK命令中的OFS变量用于存储AWK打印输出时的输出字段分隔符。空格字符被视为默认的字段分隔符。

语法

awk 'OFS=”field_separator” {print $n, $m, $o}

代码

date | awk 'OFS="/" {print $2, $3, $6}' date | awk 'OFS="-" {print $2, $3, $6}'

输出

Variable OFS

例子 #4 - 变量END.

为了计算输入文件的行数,我们可以在awk命令中使用END变量,如下所示。

语法

awk 'END {print NR}' file_name.txt

代码

awk 'END {print NR}' testing.txt

输出
AWK Command in Unix 8

例子 #5 - 变量BEGIN.

这个BEGIN变量是用来在任何记录被执行之前设置动作的。我们也可以在处理记录之前打印任何我们想打印的数据,如下所示。

语法

awk 'BEGIN { print “print your data”} ' file-name.txt

代码

awk 'BEGIN {print "Starting of the line"}; {print $2}; ' testing.txt

输出

AWK Command in Unix 9

结论

Unix Shell脚本中的AWK命令用于高级的文本处理。它通常被用于模式匹配和作为报告工具。通过使用awk,我们可以定义一组要在输入文件上执行的动作。作为参数传递的输入数据被划分为字段和记录。