• 本页内容

53. print 命令


默认情况下,awk print 命令(不带任何参数)打印完整记录,如下所示。 以下示例相当于cat employee.txt命令。

$ awk '{print}' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager

您还可以通过传递$field-number 作为打印命令参数来打印记录中的特定字段。 以下示例假定仅打印每条记录的员工姓名(字段号 2)。

$ awk '{print $2}' employee.txt
Doe,CEO
Smith,IT
Reddy,Sysadmin
Ram,Developer
Miller,Sales

等等。 它没有按预期工作。 它从姓氏打印到记录末尾。 这是因为 awk 中默认的字段分隔符是空格。 awk 完全按照我们的要求做了,它确实打印了第二个字段,考虑空格作为分隔符。

当使用默认空格作为分隔符时,"101,John" 成为第 1 条记录的field-1"Doe,CEO" 成为第 1 条记录的field-2。 因此,上面的 awk 示例将 "Doe,CEO" 打印为field-2

为了解决这个问题,我们应该指示 awk 使用逗号 (,) 作为字段分隔符。 使用选项-F指示字段分隔符。

$ awk -F ',' '{print $2}' employee.txt
John Doe
Jason Smith
Raj Reddy
Anand Ram
Jane Miller 

当只有一个字符用于分隔符时,以下任何一种形式都有效,即您可以在单引号(')、双引号(")或不带任何引号内指定字段分隔符,如下所示。

awk -F ',' '{print $2}' employee.txt
awk -F "," '{print $2}' employee.txt
awk -F, '{print $2}' employee.txt 

注意:您还可以使用 FS 变量来实现此目的。 我们将在 awk 内置变量部分中回顾这一点。

一个简单的报告,打印员工姓名和职务以及页眉和页脚:

$ awk -F ',' 'BEGIN \
{ print "-------------\nName\tTitle\n-------------"} \
{ print $2,"\t",$3;} \
END { print "-------------"; }' employee.txt
-------------
Name Title
-------------
John Doe CEO
Jason Smith IT Manager
Raj Reddy Sysadmin
Anand Ram Developer
Jane Miller Sales Manager
------------- 

在上面的报告中,字段未正确对齐。 我们将在后面的部分中介绍如何做到这一点。 上面的示例展示了如何使用 BEGIN 打印页眉,以及如何使用 END 打印页脚。

请注意,字段$0代表整个记录。 下面两个例子都是一样的,每个都打印employee.txt中的整行。

awk '{print}' employee.txt
awk '{print $0}' employee.txt