awk

RS-记录分隔符

让我们假设你有一个包含雇员ID和名称在一行以下的文本文件。

$ cat employee-one-line.txt
101,John Done:102,Jashon Smith:103,Raj Reddy:104,Anand Ram:105,Jane Miller

在上面的例子里, 每个记录包含两个字段 (empid and name), 并且每个记录使用 : (代替换行). 独立字段 (empid and name) 在记录里被逗号隔开。 记录默认分隔使用awk新行。如果你试图只打印雇员的名子,下面将没办法工作:

$ awk -F, '{print $2}' employee-one-line.txt
John Done:102

在上面的例子,它是处理employee-one-line.txt作为一条单独的记录,逗号作为定界符。因此它打印”John Doe:102”作为第二个字段。

如果你想用awk处理这个作为5个不同的行(取代一个单独的行),并且打印每条记录的雇员姓名,那么你必须指定记录分隔符冒号,显示如下:

$ awk -F, 'BEGIN{RS=":"}{print $2}' employee-one-line.txt
John Done
Jashon Smith
Raj Reddy
Anand Ram
Jane Miller

假设,你有下面的输入文件,记录使用-分隔 所有的字段是一个分隔行。

$ cat employee-change-fs-ofs.txt
101
John Done
CEO
-

102
Jashon 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 Done:CEO
Jashon Smith:IT Manager
Raj Reddy:Sysadmin
Anand Ram:Developer
Jane Miller:Sales Manager