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

  • `set -e` и` grep` idiom для предотвращения преждевременного выхода из сценария оболочки, когда шаблон не найден
  • grep для строк / файлов, содержащих точно х символов
  • регулярное выражение grep grep в команде sed
  • Поиск шаблона регулярного выражения для чередующегося символьного случая
  • Как использовать регулярное выражение BRE или ERE для соответствия шаблону, который не имеет определенной строки
  • Запуск find & grep и включение пути в выходной файл
  • Отключить gzip-ошибки / предупреждения при использовании zgrep
  • grep * струнаA *
  • 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']) 
    Interesting Posts

    Нормально ли для `ldd -version` выйти 1?

    Отменить и возобновить резервное копирование дубликатов

    Могу ли я установить дистрибутив, загруженный с диска на тот же диск?

    Редактор Кейт: как перейти к модифицированным линиям?

    Как я могу заставить SOCKS proxy (Danted) открыть UDP-порт

    Каков правильный способ активации VGs / LVs при загрузке?

    Whonix – whonix-gw продолжает говорить, что условие начала не выполнено

    Ключ хоста SSH продолжает меняться

    Почему я не могу подключить `strace` к процессу kworker?

    автоматически загружать последние стабильные tarball из sourceforge из командной строки?

    Трубопровод из находки в grep

    Паника в ядре – не синхронизация: нет init. При загрузке из U-Boot

    «Нет такого файла» с ksh, но скрипт работает с ksh -x?

    MSYS2: ulimit: максимальные пользовательские процессы: невозможно изменить предел: недопустимые аргументы

    Incrontab не обнаруживает модификаций на mount s3fs

    Linux и Unix - лучшая ОС в мире.