gpt4 book ai didi

python - awk 双引号字段分隔符

转载 作者:数据小太阳 更新时间:2023-10-29 02:17:24 24 4
gpt4 key购买 nike

我似乎想不出我的最后一 block 来实现我想要的输出。

我有一个包含许多条目的文件,如下所示:

<Stats>
<RecNum>45435</RecNum>
<Date>2016/12/31</Date>
<DayofWeek>6</DayofWeek>
<Time>16:35</Time>
<Dir>Closing</Dir>
<Class>2</Class>
<SpeedSpan>1</SpeedSpan>
<TimeSpan>1</TimeSpan>
<Bucket Speed="34" Count="1"/>
<Bucket Speed="35" Count="0"/>
<Bucket Speed="36" Count="1"/>
</Stats>

如果 Count=1,我想打印日期、时间和速度,如下所示:

2016/12/31  16:35   34
2016/12/31 16:35 36

我最接近的是:

$ awk -F'[ <>]' 'BEGIN {d="d";t="t";} /<Date>/ {d=$3;} /<Time>/ {t=$3;} /Count="1"/ {print d "\t" t "\t" $3;}' speed.xml

这给了我:

2016/12/31  16:35   Speed="34"
2016/12/31 16:35 Speed="36"

我尝试了许多不同的迭代,但似乎无法在没有措辞的情况下获得速度数字。我尝试使用 "作为字段分隔符,但它似乎从未按预期工作。

希望找到一个 awk 解决方案,但如果没有,我总是可以使用 python 程序去除不需要的字符。

最佳答案

Jose Ricardo Bustos M.'s helpful XSLT-based answerStephen Rauch's helpful Python-based answer更可取,因为它们采用适当的 XML 解析,这既更灵活又更健壮。

要修复您的 awk 命令:

awk -v OFS='\t' -F'[<>]' '
/<Date>/ {d=$3}
/<Time>/ {t=$3}
/Count="1"/ {
split($0, flds, "\"")
print d, t, flds[2]
}
' speed.xml

split($2, flds, "\"")" 拆分感兴趣的行并将结果存储在自定义数组 flds 中, 它允许通过索引 2 提取 "Speed" 属性值。

另请注意 -v OFS='\t' 的使用 - 即,将输出字段分隔符设置为制表符 - 这会启用更简单的 print 语句枚举 (,) 输出字段,依靠 awkOFS 隐式分隔它们。


事后思考:将 " 添加到字段分隔符集也可以:

awk -v OFS='\t' -F'["<>]' '
/<Date>/ {d=$3}
/<Time>/ {t=$3}
/Count="1"/ { print d, t, $3 }
' file

关于python - awk 双引号字段分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com