如何从文件中捕获多个文本并以特定格式打印?

时间:2014-02-27 22:09:56

标签: perl awk

我有一个包含以下内容的文件:

CLASS
1001
CATEGORY
11 12 13 15
16 17
CLASS
3101
CATEGORY
900 901 902 904 905 907
908 909
910 912 913
CLASS
8000
CATEGORY
400 401 402 403

我喜欢使用perl或awk重新格式化以获得以下结果:

1001 11&12&13&15&16&17
3101 900&901&902&904&905&907&908&909&910&912&913
8000 400&401&402&403

我们将不胜感激。 (我曾经用excel VBA做过),但这次我想用perl或awk简化它。提前致谢。 :)

2 个答案:

答案 0 :(得分:2)

perl -lne'
  BEGIN{ $/ ="CLASS"; $" ="&" }
  ($x, @F) = /\d+/g or next;
  print "$x @F"
' file

输出

1001 11&12&13&15&16&17
3101 900&901&902&904&905&907&908&909&910&912&913
8000 400&401&402&403

答案 1 :(得分:0)

另一个awk版本

awk '/CLASS/ {c=1;f=0;if (NR>1) print a;next} c {a=$0 " ";c=0} /CATEGORY/ {f=1;c=0;next} f {gsub(/ /,"\\&",$0);a=a $0} END {print a}' file
1001 11&12&13&1516&17
3101 900&901&902&904&905&907908&909910&912&913
8000 400&401&402&403