• 本页内容

57. RS - 记录分隔符


假设您有以下文本文件,其中一行包含员工 ID 和姓名。

$ vi employee-one-line.txt
101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand
Ram:105,Jane Miller

在上面的示例中,每条记录都包含两个字段(empidname),并且每条记录都用:分隔(而不是换行)。 记录中的各个字段(empidname)以,分隔。

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