grep 对列进行排序

grep 对列进行排序

我有以下 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'])

相关内容