【发布时间】:2012-03-03 15:04:01
【问题描述】:
在日常工作中,我需要从各种混合格式的日志和其他文本数据中提取一些文本。是否有一个实用程序(如 awk、grep 等)我可以用来快速执行任务,而无需编写冗长的 bash/perl/python 脚本?
示例 1:对于下面的输入文本
mylog user=UserName;password=Password;other=information
我想提取用户名和密码值。伪实用程序最好看起来像这样(a la awk):
cat input-text.txt | magic --delimit-by=";" --then-by="="
'{print "The username is $values[0][1] and password is $values[1][1]"}'
将;分隔的输入字符串放在$values数组中,该数组中的每个值进一步由=分隔以形成嵌套数组。
如果有这样的东西会更好:
cat input-text.txt | magic --map-entry-sep=";" --map-key-val-sep="="
'{print "The username is $[user] and password is $[password]"}'
将解析结果转成map,方便按键查找。
示例 2: 也可以解析三重嵌套元素。考虑像
这样的输入文本mylog mylist=one,two,three;other=information
我现在想提取列表 mylist 的第二个元素,使用类似:
cat input-text.txt | magic --delimit-by=";" --then-by="=" --and-then-by=","
'{print "The second element of mylist is: $values[0][1][1]}'
当然,我宁愿使用某种 JSON 解析器并将输入数据转换为相应的对象/地图/列表格式以便于提取,但这是不可能的,因为我正在处理不同格式的数据。
我通常使用 awk、grep、cut 和 sed 组合使用多个管道,并一次提取每个感兴趣的值(列),但这很乏味,并且需要稍后将不同的列合并为一个。通常,我需要所有提取的 CSV 格式的列,以便在 Excel 中进一步处理。
如果有任何建议或cmets,将不胜感激。
【问题讨论】: