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

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

cat test.txt | sort -k2 | awk '{print $ 2}' | sed 's / "// g' | grep xvf | head -1

  • Почему я должен дважды уйти от «точки»?
  • Как открыть grep (1p) manpage?
  • pipe ls to grep (строки против «элементов»)
  • Заменить все значения в одном столбце на 1
  • Как разбить файл на основе списка шаблонов и назвать выходные файлы по шаблону?
  • grep --color = auto breaks, когда ^ M находится внутри цветного соответствия
  • 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

  • Как сделать GNU grep по умолчанию во FreeBSD?
  • Простой способ извлечь ценность из HTML
  • Как использовать grep с шаблонами в файле и получить количество вхождений каждого шаблона?
  • Где grep -r поиск по умолчанию?
  • grep: игнорирование GREP_OPTIONS для поиска с учетом регистра
  • Команда grep -w не работает
  • 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 - лучшая ОС в мире.