linux - 在 shell 中解析非结构化数据

标签 linux shell parsing grep

我要解析以下文件:

0.9103726 = (MATCH) sum of:
0.0050276485 = (PHRASE) title:abc
0.9323103726 = (MATCH) sum of:
0.1323103726 = (MATCH) mul of:
0.185 = (PHRASE) title:xyz
0.9103726 = (MATCH) sum of:
0.234 = (PHRASE) title:bcd

我想要的输出是这样的:

0.0050276485 -- title -- abc
0.185 -- title -- xyz
0.234 -- title -- bcd

我试过的命令是这样的:

grep -oP '[\d.]+(?==(PHRASE)title:?)'

但它没有给我正确的输出。 抱歉之前的问题。不清楚。

最佳答案

如果你想要的是=之前的第一个元素和:之后的最后一个元素,那么说:

$ awk -F"=|:" -v OFS="--" '{print $1, $NF}' file
x --y 
x1--y1

请注意,我们还告诉 awk 使用 -- 作为输出字段分隔符。

由于您没有发布任何尝试,因此在同一行显示输出作为练习 :)


更新问题的更新

同样,你可以使用这个:

$ awk -F"=|:| " -v OFS="--" '/title/{print $1, $(NF-1), $NF}' a
0.0050276485--title--abc
0.185--title--xyz
0.234--title--bcd

这和以前一样,只是针对包含 title 的行。在这些上,它根据 =:(空格)分隔符打印第一个、倒数第二个和最后一个字段。

关于linux - 在 shell 中解析非结构化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27900543/

相关文章:

java - 在 linux 中运行可执行文件 - 不工作

linux - 搜索某些模式并替换行中间的某些文本并忽略该行的最后一个字符

shell - 使用 Haskell 输入数据

java - 如何在 Java 中将 jsonString 转换为 JSONObject

ios - 如何将 String 转换为 JSON,以便我可以将其解析为对象

android - 从 guest 操作系统访问本地主机

linux - ARM Linux 引导的一些细节

arrays - bash 脚本收集数组中的 pid

c - 如何在我自己的自定义 shell 中实现连接到远程 shell?

javascript - 使用 js-xlsx 解析 Excel 工作表