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

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

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

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

  • Сравнение двух файлов по горизонтали и по вертикали
  • Умножьте столбец с помощью awk
  • менее в сочетании с последовательными цветовыми последовательностями предотвращает разрывы страниц
  • OS X FileVault 2 по принуждению пароль
  • извлекать инкрементные изменения в каталог
  • Как изменить / упорядочить данные в файле с помощью Awk
  • Результат будет таким:

    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 

  • Сила сопоставления Bash (капитальные знаки против малого)
  • Различные двоичные файлы сна на Mac (Darwin) и в Linux. Как правильно обрабатывать различия?
  • Как написать эту замену с условием
  • Скрипт, сравнивающий два файла, соответствует двум строкам в любой точке
  • Есть ли пароль root для OS X и Ubuntu?
  • Передача файлов Сообщение SSH SCP об ошибке: «Stdin: не является tty»
  • 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 - лучшая ОС в мире.