grep с сортировкой по столбцу

У меня есть следующий test.txt. Используя нижеприведенную команду, напечатайте ее: xvf-9c3683ff. Однако мне нужен вывод xvf-bcb500df. Он основан на его последней дате.

cat test.txt | sort -k2 | awk '{print $ 2}' | sed 's / "// g' | grep xvf | head -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" } 

вывод должен выводиться ниже.
XVf-bcb500df

  • Поиск идентификатора процесса и его уничтожение
  • grep --color добавляет код ANSI ESC [K - это может изменить отображаемый текст
  • Почему сопоставление 1250 строк против 90k моделей так медленно?
  • Выводить несколько файлов из одного grep?
  • Поиск шаблона между определенными линиями и номерами строк печати
  • Tail Grep - печать окружающих линий до тех пор, пока шаблон не будет сопоставлен
  • как использовать grep -v в сценарии ожидания
  • Поиск терминов, которые встречаются ровно один раз в наборе файлов
  • 3 Solutions collect form web for “grep с сортировкой по столбцу”

    Предполагая, что это форматированный файл 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 

    Данные в структурированном и стандартном формате должны анализироваться парсером, написанным для задачи. Есть доступные парсеры для использования в сценарии оболочки или в командной строке для нескольких распространенных форматов, включая JSON , XML , CSV и другие.

    Шаг 1: формат reajusting:

     $ 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 comand line документирован в http://trentm.com/json/ . Если необходимо,

    • установить узел
    • и sudo npm install -g json

    Вы можете попробовать следующее:

     | 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 

    EDIT – подход 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']) 
    Linux и Unix - лучшая ОС в мире.