如何以文件中的特定顺序重新排列文本

问题描述 投票:-4回答:1

我有一个看起来像这样的文件:

 2                                 START EPOCH
23 12 34 12 06 21 44 123 111 51 -1 12 12 41 21
23 12 04 12 01 21 34 123 121 59 -1 12 12 11 21
23 92 34 12 -1 21 44 153 121 51 -2 12 17 41 20
 2                                 END EPOCH
 2                                 START MAP
20 12 34 12 16 21 44 128 111 11 -1 12 12 21 21
23 12 14 12 01 27 48 123 121 59 -4 17 12 11 01
23 92 34 16 -1 21 44 153 141 51 -1 12 19 41 20
 2                                 END MAP   
 3                                 START EPOCH
23 12 34 12 06 21 44 123 111 51 -1 12 12 41 21
13 12 04 42 01 21 34 123 141 59 -3 12 12 11 21
23 92 34 12 -1 21 44 153 123 51 -1 15 18 41 20
 3                                 END EPOCH
 3                                 START MAP
20 12 32 19 16 21 44 128 011 11 -1 12 12 21 21
23 12 14 12 01 27 48 123 121 59 -1 17 12 11 01
29 92 34 16 -1 21 44 153 181 51 -5 12 19 41 20
 3                                 END MAP     
...

目标是像这样重新格式化该文件:

 2                                 START EPOCH
23 12 34 12 06 21 44 123 111 51 -1 12 12 41 21
23 12 04 12 01 21 34 123 121 59 -1 12 12 11 21
23 92 34 12 -1 21 44 153 121 51 -2 12 17 41 20
 2                                 END EPOCH
 3                                 START EPOCH
23 12 34 12 06 21 44 123 111 51 -1 12 12 41 21
13 12 04 42 01 21 34 123 141 59 -3 12 12 11 21
23 92 34 12 -1 21 44 153 123 51 -1 15 18 41 20
 3                                 END EPOCH
...
 2                                 START MAP
20 12 34 12 16 21 44 128 111 11 -1 12 12 21 21
23 12 14 12 01 27 48 123 121 59 -4 17 12 11 01
23 92 34 16 -1 21 44 153 141 51 -1 12 19 41 20
 2                                 END MAP  
 3                                 START MAP
20 12 32 19 16 21 44 128 011 11 -1 12 12 21 21
23 12 14 12 01 27 48 123 121 59 -1 17 12 11 01
29 92 34 16 -1 21 44 153 181 51 -5 12 19 41 20
 3                                 END MAP 
...

您能否找到一种方法或一些编程代码来实现这一目标?非常感谢。码:linux sed或其他语言

问候

c linux text fortran handle
1个回答
0
投票

您已标记Linux。这是一个粗略但可行的命令行解决方案,涉及旧的工作马awk:

awk '/START EPOCH/,/END EPOCH/' orig.data > epoch.tmp
awk '/START MAP/,/END MAP/' orig.data > map.tmp
cat epoch.tmp map.tmp > reordered.data
rm epoch.tmp map.tmp

(awk脚本/A/, /B/将打印正则表达式匹配项AB之间的所有行。进行两次遍历,每种块类型一次,然后连接并清理临时对象。]

© www.soinside.com 2019 - 2024. All rights reserved.