3

次の構造のテキスト ファイルからデータを抽出しようとしています。

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 '/^  [A-Z]/{print $1"\t"$2"\t"$3}'

これにより、次の結果が得られます。

  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

これを返す 2 パス抽出を作成するにはどうすればよいですか。

  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.
4

2 に答える 2

5

片道awk:

awk -F":" '/^Employee/{a=$NF;next}{print $0,a}' file

テスト:

$ 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.
于 2013-06-16T13:27:43.187 に答える
2

GNU sed のコード:

sed '/:/{s/[^:]\+://;H;x;s/.*\n//;d};G;s/\n//' file
于 2013-06-16T21:41:32.760 に答える