regex - 相同的模式 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];}'
请帮忙。
解决方案
使用 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
推荐阅读
- reactjs - JSON 文件中的数据,React 表跨域错误
- python - 为什么特定算法通过 ctypes 需要更长的时间?
- assembly - 组装中 HiFive 1 板的稳定输入读数问题
- python - 使用 FieldMask 时,HTTP PATCH 应如何传达资源属性的删除
- c - 如果两个指针指向同一个内存地址,是只需要使用free(ptr)一次还是两次?
- sql - 如何在对齐行时一次从两个不同的表中提取不同的计数
- sparql - 在 SPARQL 中查找常见的超类
- ios - 在初始加载时将数据从 TabBarController 传递到子视图控制器
- python - 将 pyspark 数据帧拆分为块并转换为字典
- javascript - Electron 项目结构,在子目录下无法运行