4

私のダミーファイルは次のようになります。

  >Tom
  text
  text text, year = 16 
  text 
  text
  text
  Grades . . . . 10
  Grades . . . . 9
  >Ann  
  text
  text text, year = 17 
  text 
  Grades . . . . 10
  Grades . . . . 10
  Grades . . . . 9 

私がしたい:
すべての名前に値を割り当て、成績行の年と最後の番号を抽出します。
次のような出力の場合:

  1 Tom 
  1 year = 16
  1 10
  1 9 
  2 Ann
  2 year = 17
  2 10
  2 10
  2 9 

レコードから次のレコードまでテキストを変更する方法がわかりません。可能かもしれませんがgrep '^>' -An、行番号はレコードごとに異なります。

4

2 に答える 2

4

先頭の空白が実際のファイルに存在しないと仮定すると、次の使用方法がありますawk

awk 'sub(/^>/,"") { print ++i, $0 } /Grades/ { print i, $NF } /year =/ { print i, "year = ", $NF }' file

結果:

1 Tom
1 year =  16
1 10
1 9
2 Ann  
2 year =  17
2 10
2 10
2 9
于 2013-06-04T13:40:12.460 に答える
2
perl -nE 'BEGIN{ $/ = ">"; $i=0} chomp; next unless length; $i++; say "$i $_" for /(.+)/, /(year\s*=.+)/, /grades.+?(\d+)/gi' file
于 2013-06-04T13:50:11.013 に答える