我有以下 test.txt。使用以下命令打印输出:xvf-9c3683ff。但是我需要输出 xvf-bcb500df。它基于其最后日期。
猫测试.txt |排序 -k2 | awk '{print $2}' | sed 's/"//g' | grep xvf | head -1
测试.txt
{
"date": "2017-01-30T10:55:46.000Z",
"Id": "xvf-9c3683ff"
},
{
"date": "2017-01-26T12:58:20.000Z",
"Id": "xvf-bcb500df"
},
{
"date": "2017-01-31T18:33:20.000Z",
"Id": "xvf-ee07b28d"
}
输出应打印在结果下方。
xvf-bcb500df
答案1
[
假设这是一个 JSON 格式的文件(开头和]
结尾都缺少),jq
:
$ jq 'sort_by(.date)' data.json
[
{
"date": "2017-01-26T12:58:20.000Z",
"Id": "xvf-bcb500df"
},
{
"date": "2017-01-30T10:55:46.000Z",
"Id": "xvf-9c3683ff"
},
{
"date": "2017-01-31T18:33:20.000Z",
"Id": "xvf-ee07b28d"
}
]
要获得第一个Id
:
$ jq 'sort_by(.date)|.[0].Id' data.json
"xvf-bcb500df"
要获取不带引号的内容:
$ jq -r 'sort_by(.date)|.[0].Id' data.json
xvf-bcb500df
应使用为任务编写的解析器来解析结构化和标准格式的数据。有现成的解析器可用于 shell 脚本或命令行中的几种常见格式,包括JSON,XML,CSV和别的。
答案2
步骤一:调整格式:
$ cat data.json | json -ga date Id
2017-01-30T10:55:46.000Z xvf-9c3683ff
2017-01-26T12:58:20.000Z xvf-bcb500df
2017-01-31T18:33:20.000Z xvf-ee07b28d
下一步:排序并打印 ID:
cat data.json | json -ga date Id | sort | awk 'NR==1{print $2}'
json 命令行工具记录在http://trentm.com/json/。如果有需要的话,
- 安装节点
- 和 sudo npm install -g json
答案3
您可以尝试以下操作:
| awk '{print $2}' | sed -n '/"/N;s/\n//;s/"//gp' | sort | awk -F, '/xvf/{print $2}' | head -n1
例子:
$ echo '{
"date": "2017-01-30T10:55:46.000Z",
"Id": "xvf-9c3683ff"
},
{
"date": "2017-01-26T12:58:20.000Z",
"Id": "xvf-bcb500df"
},
{
"date": "2017-01-31T18:33:20.000Z",
"Id": "xvf-ee07b28d"
}' | awk '{print $2}' | sed -n '/"/N;s/\n//;s/"//gp' | sort | awk -F, '/xvf/{print $2}' | head -n1
xvf-bcb500df
编辑-Python方法
确保您的数据有效JSON
,然后您可以使用以下脚本:
import json
with open('test.txt', 'rt') as file:
data = sorted(json.load(file), key=lambda x: x['date'])
print(data[0]['Id'])