解析每个记录跨越1行的文本文件

时间:2012-12-27 02:50:06

标签: parsing concatenation field multiline

我需要解析一个包含数百条记录的文本文件,每条记录跨越1行以上。我是Python的新手,并试图用几种复杂的方式用grep和awk来做这件事,但还没有运气。 该文件包含如下所示的记录:

409547095517 911033 00:47:41 C44 00:47:46 D44 00:47:53 00:47:55  (555)555-1212 00:47 10/31 100 Main Street - NW
                 Some_City TX 323 WRLS METRO PCS
                    P#122-5217 ALT#555-555-1212 LEC:MPCSI WIRELESS CALL Q. 非常需要电话的位置查询#*

如果我能将这些多行记录压缩到每条记录的1行,我真的可以做我需要的一切。每个记录总是以“40”开头,或者我可以让9110指示开始,因为这些将始终存在并且是不可取的,因为40是在线的开头。我使用了HEX编辑器,发现我可以删除所有换行符(十六进制0D0A),但这并不比手动编辑文件更好,并且我不需要删除每条记录的最后一行。有些记录只有2行,但大多数记录只有5行。

是否有一种方式python或以其他方式将构成记录的行连接到一行,其中40或更好的选择9110表示记录的开头?

任何想法或指示都将非常感激。我有python和一个好的IDE,我很好用grep找到但是学习awk(不要笑)......

1 个答案:

答案 0 :(得分:2)

awk会这样做。您需要识别启动记录的行。在这种情况下,它是409547095517 因此,我们假设如果一行以8个数字开头则是安全的,它是记录的开头。

awk ' NR> 1 && /^[0-9]{8}/ { printf("\n") }  
      {printf("%s", $0) } 
       END{ printf("\n") }'  filename > newfilename

{8}更改为适合您的任何数字。