从文本文件中获取数据

leo*_*ame 3 regex perl awk sed pattern-matching

我正在尝试使用以下结构从文本文件中提取数据:

Employee: John C.
  2013-01-01  10  $123
  2013-01-02  12  $120
  2013-01-03  8  $150
Employee: Michael G.
  2013-01-01  5  $13
  2013-01-05  11  $20
  2013-01-10  2  $155
Run Code Online (Sandbox Code Playgroud)

如您所见,模式是一个包含Employee名称的表头,然后是包含其所有事务的表内容,然后重复模式.

要提取交易,我这样做:

awk '/^  [A-Z]/{print $1"\t"$2"\t"$3}'
Run Code Online (Sandbox Code Playgroud)

这给出了这个结果:

  2013-01-01  10  $123
  2013-01-02  12  $120
  2013-01-03  8   $150
  2013-01-01  5   $13
  2013-01-05  11  $20
  2013-01-10  2   $155
Run Code Online (Sandbox Code Playgroud)

如何创建一个返回此的两遍提取:

  2013-01-01  10  $123  John C.
  2013-01-02  12  $120  John C.
  2013-01-03  8   $150  John C.
  2013-01-01  5   $13   Michael G.
  2013-01-05  11  $20   Michael G.
  2013-01-10  2   $155  Michael G.
Run Code Online (Sandbox Code Playgroud)

jay*_*ngh 5

一种方式awk:

awk -F":" '/^Employee/{a=$NF;next}{print $0,a}' file
Run Code Online (Sandbox Code Playgroud)

测试:

$ cat file
Employee: John C.
  2013-01-01  10  $123
  2013-01-02  12  $120
  2013-01-03  8  $150
Employee: Michael G.
  2013-01-01  5  $13
  2013-01-05  11  $20
  2013-01-10  2  $155
$ awk -F":" '/^Employee/{a=$NF;next}{print $0,a}' file
  2013-01-01  10  $123  John C.
  2013-01-02  12  $120  John C.
  2013-01-03  8  $150  John C.
  2013-01-01  5  $13  Michael G.
  2013-01-05  11  $20  Michael G.
  2013-01-10  2  $155  Michael G.
Run Code Online (Sandbox Code Playgroud)