如何将JSON文件转换为CSV文件,然后通过STMP发送

时间:2014-10-06 12:41:13

标签: json csv

我需要帮助创建一个脚本

  • 读取名为settings_xx.js的JSON文件(其中xx是两位数的字符串)
  • 使用"描述"循环遍历对象键
  • 解析"描述"密钥格式YYY-XXXXXXXX-xxxxxxxx-yyyyyyyyyyyyyy...其中
    • YYY总是三个A-Z字符,
    • XXXXXXXX是一个开始日期
    • xxxxxxxx是结束日期
    • 字符串yyyyyyy...的其余部分是其他可变长度信息。
  • 创建一个CSV文件,其中的描述早于指定日期
  • 通过SMTP发送文件。

示例:

{"description":"TFW-20121203-20130803-1177SVR-Softerong-TO-VPN-FWR-0095-SVRCJO"}

到目前为止,我已经能够使用以下命令将描述输出到Putty中的txt文件:

cat settings_xx.js | \
sed -e 's/[{}]/''/g' | \
awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | \
grep '"description":' | \
sed 's/:/ /1' | \
awk -F" " '{ print $2 >> file.txt }'

1 个答案:

答案 0 :(得分:0)

以下是使用jq

的部分解决方案
def d2u($d): $d | strptime("%Y%m%d") | mktime ;
def enddate: split("-")[2] ;

  .description
| select(d2u(enddate) < d2u($oldest))

如果filter.jq包含此过滤器且settings_00.js包含具有“描述”成员的对象,例如

{ "description": "TFW-20121203-20130803-1177SVR-Softerong-TO-VPN-FWR-0095-SVRCJO" }
{ "description": "ZZZ-19700101-19710101-9999XXX-Abcdefghi-JK-LMN-OPQ-0000-RSUVWX" }

然后

$ jq -M -r --arg oldest 20000101 -f filter.jq settings_00.js

将产生

ZZZ-19700101-19710101-9999XXX-Abcdefghi-JK-LMN-OPQ-0000-RSUVWX