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