问题描述
./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)/,"",$1);print}' file.txt
输出
Data1/TEST_Data1,durationEnd="1",timeUnit="D"
Data2/TEST_Data2,durationEnd="2",timeUnit="M"
说明:我使用 FPAT
来提取有趣的输入元素,即这些元素从一开始就不含空格并且后面跟着 xml
或 ((durationEnd
或 {{1} }) 后跟 timeUnit
非"
"
)。然后我删除 "
后跟 .
或 /
(注意 xml
必须是文字 .
所以它被转义)。然后我打印所有内容,它由 .
连接,因为我将其设置为输出字段分隔符 (,
)。
免责声明:我仅使用显示的样本对其进行了测试。
(在 gawk 4.2.1 中测试)