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