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