1

我需要解析一个文本文件,其中包含数百条记录,每条记录超过 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 QUERY CALLER FOR LOCATION QUERY CALLER FOR PHONE #*

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

有没有办法python或其他方式将构成记录的行连接成一行,其中 40 或更好的选择,其中 9110 表示记录的开始?

任何想法或指示将不胜感激。我有 python 和一个好的 IDE,我很擅长 grep 和 find 但学习 awk(别笑)......

4

1 回答 1

3

awk 会做到的。您需要识别开始记录的行。在这种情况下,它是409547095517 所以让我们假设如果一行以 8 个数字开头是安全的,它是记录的开始。

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

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

于 2012-12-27T03:01:29.250 回答