我的虚拟文件如下所示:
>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
,但每个记录的行号不同。
答案 0 :(得分: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
答案 1 :(得分:2)
perl -nE 'BEGIN{ $/ = ">"; $i=0} chomp; next unless length; $i++; say "$i $_" for /(.+)/, /(year\s*=.+)/, /grades.+?(\d+)/gi' file