首页 > 解决方案 > 相同的模式 Apper 多个时间捕获全部使用 gawk

问题描述

下面是字符串,例如,

[{"attrName":"val","difference":{"$numberDecimal":"-5900"},"diffPersent":{"$numberDecimal":"-4.4014"}},{"attrName":"totalTaxval","difference":{"$numberDecimal":"-5000.00"},"diffPersent":{"$numberDecimal":"-4.4014"}},{"attrName":"totalIamt","difference":{"$numberDecimal":"-900.00"}},{"attrName":"totalTaxAmt","difference":{"$numberDecimal":"-900.00"},"diffPersent":{"$numberDecimal":"-4.4014"}},{"attrName":"iamt","difference":{"$numberDecimal":"-900"},"index":0},{"attrName":"txval","difference":{"$numberDecimal":"-5000"},"index":0}]

在这里,我想要 attrName 之后的所有属性。预期结果如下,

val,totalTaxval,totalIamt,totalTaxAmt,iamt,txval

我只想使用 gawk 正则表达式来实现这一点,而不是任何其他语言 下面是我正在尝试但无法正常工作的内容,

echo '[{"attrName":"val","difference":{"$numberDecimal":"-5900"},"diffPersent":{"$numberDecimal":"-4.4014"}},{"attrName":"totalTaxval","difference":{"$numberDecimal":"-5000.00"},"diffPersent":{"$numberDecimal":"-4.4014"}},{"attrName":"totalIamt","difference":{"$numberDecimal":"-900.00"}},{"attrName":"totalTaxAmt","difference":{"$numberDecimal":"-900.00"},"diffPersent":{"$numberDecimal":"-4.4014"}},{"attrName":"iamt","difference":{"$numberDecimal":"-900"},"index":0},{"attrName":"txval","difference":{"$numberDecimal":"-5000"},"index":0}]' | gawk '{match($0, /"attrName":"(.*)","/, ary); print ary[1];}' 

请帮忙。

标签: regexawk

解决方案


使用 GNU awk 进行 FPAT:

$ awk -v FPAT='[^"]*' '{o=s=""; for (i=1; i<NF; i++) if ($i=="attrName") {o=o s $(i+2); s=","} print o}' file
val,totalTaxval,totalIamt,totalTaxAmt,iamt,txval

推荐阅读