小码奔腾

记录一些和自动化测试、CI有关的想法


  • Home

  • Archives

用shell中用jq解析json遇到compile error

Posted on 2017-12-05

前几天接到任务,需要完善一段shell写的测试脚本,其中的问题最后归结成这样一个问题,已知如下json格式的字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{  
"up": true,
"pending": false,
"available": true,
"autostart": true,
"dynamic": false,
"uptime": 5217,
"ipv4-address": [
{
"address": "192.168.59.150",
"mask": 24
}
],
"ipv6-address": [

],
"ipv6-prefix": [

],
"ipv6-prefix-assignment": [

],
"route": [

]
}

目标是需要解析获得ipv4-address.address的值,网上搜了下,一般shell命令行里推荐使用jq,试用后发现一个有意思的问题,仿佛jq不太喜欢field name中间有dash,也就是那一小段横线,执行cat data.json > jq -r '.ipv4-address.address' 就会报compile error。

进一步搜索,用bing的国际版终于找到相关页面,见https://github.com/stedolan/jq/issues/38,也即这是jq的bug。可用的解决方案最终如下:

1
cat data.json > jq -r '.["ipv4-address"][0].address'

用Shell精简log文件(shell的字符串和文件操作)

Posted on 2016-11-29

当前目录下有文件log,内容大致如下

1
2
2015-11-29 54144a04ad4asd044a4s CSeq:1 INVITE sip:2112@sipserver.com:5060 SIP/2.0
2015-11-29 54144a04ad4asd045457 CSeq:1 INVITE SIP/2.0 200 OK

将此log文件做精简,创建文件minilog内容如下

1
2
1 INVITE sip:2112@sipserver.com:5060 SIP/2.0
1 INVITE SIP/2.0 200 OK

Shell脚本代码如下

1
2
3
4
5
6
7
8
9
10
#!/bin/sh

function shortLog() {
while read line
do
echo ${line#*CSeq:} >> $2
done < $1
}

shortLog log miniLog

比较时间字符串的问题

Posted on 2016-08-29

最近做Web UI方面的测试,遇到这样一个问题:某设备界面有一个开机时间显示Uptime: 9minutes 21seconds,这里添加一个测试需要比较刷新变动之后的Uptime比之前的Uptime多,比如之前是9minutes 21seconds,后来是9minutes 23seconds,后来的时间应该比之前的晚/多。

这里涉及到时间字符串转换的问题,找了半天,最后大致用如下代码解决。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
public static void main(String []args) {
doSomething();
}

public static Date parse(String strDate) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("mm'minutes' ss'seconds'");
return sdf.parse(strDate);
}

public static void doSomething() {
try {
Date cur = parse("12minutes 22seconds");
Date later = parse("12minutes 29seconds");
System.out.println(cur.before(later));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
1…56
Reed Xia

Reed Xia

记录一些和自动化测试、CI有关的想法

33 posts
32 tags
GitHub E-Mail
© 2018 Reed Xia
Hosted by GitHub Pages