如何从 grep 输出中提取特定的键值对

How to extract specific key value pairs from a grep output

我在下面的文件夹中有 grep 的输出,

./Data1/TEST_Data1.xml:<def-query collection="FT_R1Event" count="-1" desc="" durationEnd="1" durationStart="0" durationType="CAL" fromWS="Data1" id="_q1" timeUnit="D">

./Data2/TEST_Data2.xml:<def-query collection="FT_R2Event" count="-1" desc="" durationEnd="2" durationStart="0" durationType="ABS" fromWS="Data2" id="_q1" timeUnit="M">

我想提取下面的内容,然后是一些分隔符,比如“,”,如下所示,

Data1/TEST_Data1, durationEnd="1", timeUnit="D"

Data2/TEST_Data2, durationEnd="2", timeUnit="M"

请帮助我使用基本的 linux 命令实现此目的。

我会按照以下方式使用 GNU AWK 来完成。让file.txt内容为

./Data1/TEST_Data1.xml:<def-query collection="FT_R1Event" count="-1" desc="" durationEnd="1" durationStart="0" durationType="CAL" fromWS="Data1" id="_q1" timeUnit="D">

./Data2/TEST_Data2.xml:<def-query collection="FT_R2Event" count="-1" desc="" durationEnd="2" durationStart="0" durationType="ABS" fromWS="Data2" id="_q1" timeUnit="M">

然后

awk 'BEGIN{OFS=", ";FPAT="(^[^ ]+xml)|((durationEnd|timeUnit)=\"[^\"]+\")"}{gsub(/\.([/]|xml)/, "", );print}' file.txt

产出

Data1/TEST_Data1, durationEnd="1", timeUnit="D"

Data2/TEST_Data2, durationEnd="2", timeUnit="M"

说明:我使用 FPAT 来提取有趣的输入元素,即从开始不包含空格且后面跟有 xml 或 ((durationEndtimeUnit) 后跟 "" ")。然后我删除 . 后跟 /xml (注意 . 必须是文字 . 所以它被转义了)。然后我打印所有内容,由 , 连接,因为我将其设置为输出字段分隔符 (OFS).

免责声明:我仅使用显示的样本对其进行了测试。

(在 gawk 4.2.1 中测试)