57. RS - 记录分隔符
假设您有以下文本文件,其中一行包含员工 ID 和姓名。
$ vi employee-one-line.txt
101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand
Ram:105,Jane Miller
在上面的示例中,每条记录都包含两个字段(empid
和 name
),并且每条记录都用:
分隔(而不是换行)。
记录中的各个字段(empid
和 name
)以,
分隔。
awk 使用的默认记录分隔符是换行符。 如果您尝试仅打印员工姓名,则以下示例将不起作用。
$ awk -F, '{print $2}' employee-one-line.txt
John Doe:102
在上面的示例中,它将employee-one-line.txt
视为一条记录,并将,
视为字段分隔符。
因此,它打印 "John Doe:102"
作为第二个字段。
如果您希望 awk 将其视为 5 个不同的行(而不是单行),并打印每条记录中的员工姓名,则必须将记录分隔符指定为冒号:
,如下所示。
$ awk -F, 'BEGIN { RS=":" } { print $2 }' employee-one-line.txt
John Doe
Jason Smith
Raj Reddy
Anand Ram
Jane Miller
让我们假设您有以下输入文件,其中记录在其自己的行上用-
分隔。 所有字段都位于单独的行上。
$ vi employee-change-fs-ofs.txt
101
John Doe
CEO
-
102
Jason Smith
IT Manager
-
103
Raj Reddy
Sysadmin
-
104
Anand Ram
Developer
-
105
Jane Miller
Sales Manager
在上面的例子中,字段分隔符
FS
是换行符,记录分隔符
RS
是-
后跟换行符。
因此,如果您想打印员工姓名和工资,您应该执行以下操作。
$ awk 'BEGIN { FS="\n"; RS="-\n"; OFS=":" } {print $2, $3}' employee-change-fs-ofs.txt John Doe:CEO Jason Smith:IT Manager Raj Reddy:Sysadmin Anand Ram:Developer Jane Miller:Sales Manager