grep com ordenação na coluna

1

Eu tenho o seguinte test.txt. Usando abaixo, comande sua saída de impressão: xvf-9c3683ff. No entanto, eu preciso da saída xvf-bcb500df. É baseado em sua última data.

cat test.txt | classificar -k2 | awk '{print $ 2}' | sed 's / "// g' | grep xvf | cabeça -1

test.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"
}

a saída deve imprimir abaixo do resultado.
xvf-bcb500df

    
por user213618 01.02.2017 / 13:21

3 respostas

3

Supondo que este seja um arquivo formatado em JSON (ele não possui [ no início e ] no final), com 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"
  }
]

Para obter o primeiro Id :

$ jq 'sort_by(.date)|.[0].Id' data.json
"xvf-bcb500df"

Para obtê-lo sem as aspas:

$ jq -r 'sort_by(.date)|.[0].Id' data.json
xvf-bcb500df

Os dados em um formato estruturado e padrão devem ser analisados com um analisador escrito para a tarefa. Existem analisadores disponíveis para uso no shell script ou na linha de comando para vários formatos comuns, incluindo JSON , XML , CSV e outros.

    
por 01.02.2017 / 13:38
0

Etapa 1: reajustando o formato:

$ 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

Próximo passo: classificar e imprimir apenas ID:

cat data.json | json -ga date Id | sort | awk 'NR==1{print $2}'

A ferramenta de linha de comando json está documentada no link . Se necessário,

  • nó de instalação
  • e sudo npm install -g json
por 01.02.2017 / 13:54
0

Você pode tentar o seguinte:

| awk '{print $2}' | sed -n '/"/N;s/\n//;s/"//gp' | sort | awk -F, '/xvf/{print $2}' | head -n1

Exemplo:

$ 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

EDIT - abordagem em Python

Verifique se seus dados são válidos JSON , então você pode usar o seguinte script:

import json

with open('test.txt', 'rt') as file:
   data = sorted(json.load(file), key=lambda x: x['date'])
   print(data[0]['Id'])
    
por 01.02.2017 / 17:56

Tags