服务器 频道

AWK :Linux 管理员的智能工具包(上)

  了解字段

  实用工具将每个输入行分为记录和字段。 记录 是单行的输入,而每条记录包含若干字段。默认的字段分隔符是空格或制表符,而记录的分隔符是换行。虽然在默认情况下将制表符和空格都看作字段分隔符(多个空格仍然作为一个分隔符),但是可以将分隔符从空格改为任何其它字符。

  为了进行演示,请查看以下保存为 emp_names 的员工列表文件:

  46012 DULANEY EVAN MOBILE AL

  46013 DURHAM JEFF MOBILE AL

  46015 STEEN BILL MOBILE AL

  46017 FELDMAN EVAN MOBILE AL

  46018 SWIM STEVE UNKNOWN AL

  46019 BOGUE ROBERT PHOENIX AZ

  46021 JUNE MICAH PHOENIX AZ

  46022 KANE SHERYL UNKNOWN AR

  46024 WOOD WILLIAM MUNCIE IN

  46026 FERGUS SARAH MUNCIE IN

  46027 BUCK SARAH MUNCIE IN

  46029 TUTTLE BOB MUNCIE IN

  当 AWK 读取输入内容时,整条记录被分配给变量 $0 。每个字段以字段分隔符分开,被分配给变量 $1 、 $2 、 $3 等等。一行在本质上可以包含无数个字段,通过字段号来访问每个字段。因此,命令

  awk ''{print $1,$2,$3,$4,$5}'' names

  将会产生的打印输出是

  46012 DULANEY EVAN MOBILE AL

  46013 DURHAM JEFF MOBILE AL

  46015 STEEN BILL MOBILE AL

  46017 FELDMAN EVAN MOBILE AL

  46018 SWIM STEVE UNKNOWN AL

  46019 BOGUE ROBERT PHOENIX AZ

  46021 JUNE MICAH PHOENIX AZ

  46022 KANE SHERYL UNKNOWN AR

  46024 WOOD WILLIAM MUNCIE IN

  46026 FERGUS SARAH MUNCIE IN

  46027 BUCK SARAH MUNCIE IN

  46029 TUTTLE BOB MUNCIE IN

  值得注意的一项重要内容是, AWK 解释由空格分隔的五个字段,但当它打印显示内容时,在每个字段间只有一个空格。利用为每个字段指定了唯一号码的功能,您可以选择只打印特定的字段。例如,只打印每条记录的姓名时,只需选择第二个和第三个字段进行打印:

  $ awk ''{print $2,$3}'' emp_names

  DULANEY EVAN

  DURHAM JEFF

  STEEN BILL

  FELDMAN EVAN

  SWIM STEVE

  BOGUE ROBERT

  JUNE MICAH

  KANE SHERYL

  WOOD WILLIAM

  FERGUS SARAH

  BUCK SARAH

  TUTTLE BOB

  $

您还可以指定按任何顺序打印字段,而无论它们在记录中是如何存在的。因此,只需要显示姓名字段,并且使其顺序颠倒,先显示名字再显示姓氏:

  $ awk ''{print $3,$2}'' emp_names

  EVAN DULANEY

  JEFF DURHAM

  BILL STEEN

  EVAN FELDMAN

  STEVE SWIM

  ROBERT BOGUE

  MICAH JUNE

  SHERYL KANE

  WILLIAM WOOD

  SARAH FERGUS

  SARAH BUCK

  BOB TUTTLE

  $

0
相关文章