【发布时间】:2014-09-07 15:48:39
【问题描述】:
所以我有以
形式出现的日志文件n400_108tb_48gb 2 G 1,3-7 1 20G / 286T (< 1% )
n400_108tb_48gb:1 1 D 1-3:bay1-6 - 2.1G / 48T (< 1% )
n400_108tb_48gb:3 3 D 1-3:bay7-12 - 1.9G / 48T (< 1% )
n400_108tb_48gb:4 4 D 1-3:bay13-18 - 10G / 48T (< 1% )
n400_108tb_48gb:5 5 D 1-3:bay19-24 - 2.0G / 48T (< 1% )
n400_108tb_48gb:6 6 D 1-3:bay25-30 - 2.2G / 48T (< 1% )
n400_108tb_48gb:7 7 D 1-3:bay31-36 - 1.7G / 48T (< 1% )
这看起来很好而且处理起来很简单,所以我可以编写正则表达式来一次处理一行。
([0-9a-z_:]*)\s*([1-9])\s*([DGPTE])\s*([0-9a-z_:,-]*)\s*([1-9])\s*([0-9.]+[KMGTPE]).*?([0-9]*[KMGTPE])
我的意思是,这很难看,但我可以将其简化为
_name = r"([0-9a-z_:]*)\s*"
_id = r"([1-9])
_type = r"([DGPTE])"
_members = r"([0-9a-z_:,-]*)"
_vhs = r"([1-9-])"
_used = r"([0-9.]*[KMGTPE])"
_size = r"([0-9.]*[KMGTPE])"
_disk_protections_regex_string = r"{0}\s*{1}\s*{2}\s*{3}\s*{4}\s*{5}.*?{6}".format(
_name,
_id,
_type,
_members,
_vhs,
_used,
_size,)
然后我发现我必须解析这种格式的文件。
s200_13tb_400gb 1 +3 system, vhs_de 1:0-23, 1 53T / 218T (25% )
-ssd_48gb-ram ny_writes, vhs 2:0-23, 3:0-
_hide_spare, 1,3-19,21-25
ssd_metadata , 4:0-23,
5:0-23,
6:0-23,
7:0-23,
8:0-23,
9:0-23,
10:0-23,
11:0-23,
12:0-23,
13:0-23,
14:0-23,
15:0-23,
16:0-23,
17:0-23,
18:2-25
突然期望值是
s200_13tb_400gb-ssd_48gb-ram
system vhs_deny_writes, vhs_hide_spare, ssd_metadata
1:0-23, 2:0-23, 3:0-1,3-19,21-25, 4:0-23, 5:0-23, 6:0-23, 7:0-23, 8:0-23, 9:0-23, 10:0-23, 11:0-23, 12:0-23, 13:0-23, 14:0-23, 15:0-23, 16:0-23, 17:0-23, 18:0-23,
以及我提供的原始格式。我什至不知道从哪里开始以空格分隔的列分隔值。
【问题讨论】:
-
“空格分隔” = 制表符、空格或任何组合?
-
看起来它只是空格,但鉴于我在这些文件中发现的格式存在巨大差异,目前我没有做任何假设。
-
您的输入是否像第三列的第二、第三和第四行一样未对齐,或者是拼写错误?
-
遗憾的是,目前的数据是文件的精确复制和粘贴。
-
每个文件是否有多个记录(对于 collimated 格式)?如果是这样,有什么迹象表明它们是如何划分的?