📜  Linux AWK命令

📅  最后修改于: 2020-12-08 03:07:32             🧑  作者: Mango

AWK命令

awk命令用于Linux中的文本处理。尽管sed命令也用于文本处理,但是它有一些局限性,因此awk命令成为文本处理的便捷选择。它提供了对数据的强大控制。

Awk是一种强大的脚本语言,用于文本脚本编写。它搜索并替换文本,并对数据库进行排序,验证和索引。

它是程序员使用最广泛的工具之一,因为他们以声明的形式编写按比例缩小的有效程序,以定义文本模式和设计。

在Linux中充当过滤器。在Linux中也称为gawk(GNU awk)

它如何命名为AWK?

该命令是使用1977年写此命令原始版本的三个人的名字的第一个字母来命名的。他们的名字叫Alfred Aho,Peter WeinbergerBrian Kernighan ,来自AT&T贝尔实验室。

AWK命令的功能

Awk命令的各种功能如下:

  • 它逐行扫描文件。
  • 它将文件拆分为多个字段。
  • 它比较输入的文本或文本文件的一部分。
  • 它对文件执行各种操作,例如搜索指定的文本等等。
  • 它格式化输出线。
  • 它执行算术和字符串运算。
  • 它在输出上应用条件并循环。
  • 它将文件和数据转换为指定的结构。
  • 它产生格式报告。

句法:

Awk命令的用法如下:

awk options 'selection _criteria {action }' input-file > output-file

选项可以是:

  • -f程序文件:它读取在awk命令上编写的脚本的源代码
  • -F fs:用作输入字段分隔符。

如何定义AWK脚本?

要定义awk脚本,请使用awk命令,后跟大括号{},并用单引号''引起来,如下所示:

awk '{ print "Welcome to Awk command"}'

每次执行该命令时,上述命令都会print输入的字符串。按CTRL + D键终止该程序。考虑以下输出:

AWK命令示例

为了更好地理解Awk命令,请看以下示例:

让我们创建一个数据来应用各种awk操作。考虑来自不同流的学生数据。

要创建数据,请执行以下cat命令:

cat > student.txt
Sam CS
Daniel IT
John IT
Arya IT
Mike ECE
Helena ECE

CTRL + D键保存文件,按ESC键退出命令行编辑器。它将创建数据。考虑以下输出:

学生数据已创建,我们将对该数据执行awk命令。

示例1:列出具有指定模式的学生。

考虑以下命令:

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

输出:

示例2:awk命令的默认行为。

如果我们不指定模式,它将显示文件的所有内容。

考虑以下命令:

awk '{print}' student.txt

我们没有在上面的命令中指定任何模式,因此它将显示文件的所有行。

输出:

示例3:打印指定的列。

如果我们在此命令上指定列号,它将仅print该行。考虑以下输出:

awk '{print $1,$5} student.txt

上面的命令将print第1列和第5列。如果文件系统中不存在第5列,则仅print第1列。

考虑以下输出:

考虑以下命令:

awk '{print $1,$2}' student.txt

上面的命令将列出列号1和2。考虑以下输出:

AWK命令中的内置变量

Awk命令支持许多内置变量,其中包括$ 1,$ 2等,这些变量将文件内容分为多个段。

NR:用于显示当前行数。 awk命令对每行执行一次操作。这些行称为记录。

NF:用于计算当前数据库中的字段数。

FS:用于创建字段分隔字符以将字段划分为输入行。

OFS:用于存储输出字段分隔符。它分隔输出字段。

ORS:用于存储输出记录分隔符。它分离输出记录。它会自动打印ORS命令的内容。

例4:打印输出并显示行号。

要在输出中显示行号,请使用NR变量和Awk命令,如下所示:

awk '{print NR,$0}' student.txt 

考虑以下输出:

例5:打印文件的最后一个字段。

要显示文件的最后一个字段,请使用Awk命令执行NF变量,如下所示:

awk '{print $NF}' student.txt

考虑以下输出:

示例6:以指定格式分隔输出。

要用'-'符号或(:)分号分隔输出,请使用ORS命令如下指定:

awk 'BEGIN { ORS ="-"} {print $0}' student.txt

上面的命令将用下划线(_)符号分隔输出。考虑以下输出:

Sam CS -Daniel CS-John IT-Arya IT-Mike ECE-

示例7:打印从1到8的数字的平方。

要print从1到8的数字,请执行以下命令:

awk 'BEGIN { for(i=1;i<=8;i++) print "square of", i, "is",i*i; }'

上面的命令将print1到8的平方。考虑以下输出:

square of 1 is 1
square of 2 is 4
square of 3 is 9
square of 4 is 16
square of 5 is 25
square of 6 is 36
square of 7 is 49
square of 8 is 64

示例8:计算特定列的总和。

让我们创建一个数据以对列应用求和运算。要创建学生成绩数据,请执行以下cat命令:

javatpoint@javatpoint-GB-BXBT-2807:~$ cat >  StudentMarks
Name, Marks, Max marks            
Sam,75,100
Daniel,80,100
John,74,100
Arya,85,100
Mike,70,100 
Helena,74,100

CTRL + D保存文件。我们已经成功创建了StudentMarks数据。我们可以通过执行cat命令来检查它,如下所示:

cat StudentMarks

要计算所创建数据的第三列,请执行以下命令:

awk -F"," '{x+=$3}END{print x}' StudentMarks

输出:

600

考虑以下输出:

示例9:查找一些单独的记录。

要print一些单独的学生成绩记录,请执行以下命令:

wk -F, '{a[$1]+=$2;}END{for(i in a)print i", "a[i];}' StudentMarks

上面的命令将从StudentMarks文件中print带有其标记的个人名称。考虑以下输出:

示例10:查找exp 8的值。

要查找exp 8的值,请执行以下命令:

awk 'BEGIN{x=exp(8); print x}'

上面的命令将printexp 8的值。考虑以下输出: