Как отсортировать по 2 столбцам и сохранить верхнюю строку из каждой группы?

У меня есть два файла csv следующего формата:

column1,column2,user,column4,column5,column...column14 

Я хотел бы отсортировать файлы на основе пользователя в качестве первого ключа, а затем на основе столбца14 в порядке убывания, который представляет собой число, представляющее временную метку.

Результат будет таким:

file1:

 A,AA,jim,XX,YY,....,1485771395 A,AA,jim,XX,YY,....,1485771395 

и т.д

Я бы хотел, чтобы из этих файлов сохранялась только первая строка каждого кластера, т.е.

 A,AA,jim,XX,YY,....,1485771395 

Как я могу это сделать?

Обновить:
Пример ввода:

 "1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295 "1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571 "1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321 "1/30/2017 4:14:30 AM",New customer,tim.jones,CO,1485746070 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 "1/30/2017 11:14:50 AM",Valid customer,jim.smith,NY,1485771290 "1/22/2017 11:51:51 AM",New customer,tim.jones,CO,1485082311 

Последний столбец – это эпоха первого столбца, позволяющая сортировать строки, используя число, а не строку.
Таким образом, ожидаемый результат будет:
a) Сортировка по имени и по метке в обратном порядке, чтобы мы получили:

 "1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295 "1/30/2017 11:14:50 AM",Valid customer,jim.smith,NY,1485771290 "1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321 "1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 "1/30/2017 4:14:30 AM",New customer,tim.jones,CO,1485746070 "1/22/2017 11:51:51 AM",New customer,tim.jones,CO,1485082311 

Таким образом, у нас есть кластер строк для jim.smith другой для tim.jones отсортированный по последнему столбцу в обратном порядке (т.е. последняя дата первой строки является первой в кластере) и строка для john.doe которая имеет только 1 запись.

Тогда я хотел бы сохранить только первую строку каждого кластера. Т.е.

 "1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295 "1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 

  • Самый быстрый инструмент `uniq` в linux
  • Сравните и распечатайте данные из разных текстовых файлов на один в Shell
  • Есть ли LC_COLLATE, который сортирует точку перед тире?
  • Одна командная строка оболочки, которая находит всех студентов в LEC05 и печатает свое имя в отсортированном порядке
  • Сортировка вывода ls, где файлы заканчиваются цифрами
  • Каков порядок сортировки Linux по умолчанию?
  • команды сортировки и uniq не работают, как ожидалось, когда выполняются cron
  • Как включить команду Diff в скрипт bash с подсказкой
  • 2 Solutions collect form web for “Как отсортировать по 2 столбцам и сохранить верхнюю строку из каждой группы?”

    Данный input файла как

     "1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295 "1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571 "1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321 "1/30/2017 4:14:30 AM",New customer,tim.jones,CO,1485746070 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 "1/30/2017 11:14:50 AM",Valid customer,jim.smith,NY,1485771290 "1/22/2017 11:51:51 AM",New customer,tim.jones,CO,1485082311 

    тогда

     sort -t, -k3,3 -k5,5rn input | awk -F, '!seen[$3]++' "1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295 "1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 

    С gnu datamash :

     datamash -t, -s -f -g 3 max 5 <infile 

    но обратите внимание, что перед запуском необходимо удалить все завершающие пробелы из каждой строки на вашем входе.
    Только с awk , используя два массива:

     awk -F, '!z[$3]{x[$3]=$0;z[$3]=$5;next}$5>z[$3]{x[$3]=$0} END{for (i in z){print x[i]}}' infile 
    Linux и Unix - лучшая ОС в мире.