如何从 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
或 ((durationEnd
或 timeUnit
) 后跟 "
非 "
"
)。然后我删除 .
后跟 /
或 xml
(注意 .
必须是文字 .
所以它被转义了)。然后我打印所有内容,由 ,
连接,因为我将其设置为输出字段分隔符 (OFS
).
免责声明:我仅使用显示的样本对其进行了测试。
(在 gawk 4.2.1 中测试)
我在下面的文件夹中有 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
或 ((durationEnd
或 timeUnit
) 后跟 "
非 "
"
)。然后我删除 .
后跟 /
或 xml
(注意 .
必须是文字 .
所以它被转义了)。然后我打印所有内容,由 ,
连接,因为我将其设置为输出字段分隔符 (OFS
).
免责声明:我仅使用显示的样本对其进行了测试。
(在 gawk 4.2.1 中测试)