我需要解析一个包含数百条记录的文本文件,每条记录跨越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(不要笑)......
答案 0 :(得分:2)
awk会这样做。您需要识别启动记录的行。在这种情况下,它是409547095517
因此,我们假设如果一行以8个数字开头则是安全的,它是记录的开头。
awk ' NR> 1 && /^[0-9]{8}/ { printf("\n") }
{printf("%s", $0) }
END{ printf("\n") }' filename > newfilename
将{8}
更改为适合您的任何数字。