Мой предыдущий вопрос (здесь) стал немного сложнее.
Мне нужно идентифицировать повторяющиеся записи в текстовом файле, разделенном запятыми, на основе комбинации столбцов 4 и 5, которые представляют 4: идентификатор, 5: дату. Эти два столбца можно просто объединить.
Если есть дубликаты, мне нужно выполнить проверку на основе подстроки другого столбца, которая представляет значение int. Дубликат с более высоким значением следует сохранить. Пример создания подстроки:
cut -d"," -f14 file.txt | grep -o "N0[0-9]{3}" | sed 's/N0//g'
Если значения int совпадают, мне нужно выполнить еще одну проверку на основе столбца 9, который представляет дату. Ряд с более поздней датой следует сохранить.
Пример данных:
xyz,xyz,xyz,X08ABC,20200804,xyz,xyz,xyz,2020-08-17T20:08:27.000000Z,xyz,xyz,xyz,xyz,long_string_N0809_bla
xyz,xyz,xyz,X08ABC,20200804,xyz,xyz,xyz,2020-09-25T16:18:43.000000Z,xyz,xyz,xyz,xyz,long_string_N0809_bla
В примере третьи столбцы будут сохранены, а первые два отброшены. Все они дубликаты (col4+col5 = одинаковые), значение int в столбце 14 самое высокое в строках 2 и 3, дата в столбце 9 позже в строке 3, чем в строке 2.
Если я могу сохранить порядок строк в исходном файле, это плюс, но не обязательно.
Изменить: было бы здорово иметь решение для awk, если бы это можно было сделать в awk несколько читабельным способом. Я предполагаю, что это возможно, но я очень запутался с несколькими операциями в awk.
1)
Достаточно числового переворота для одного столбца и переворота для дат, это ваши вторичные сортировки.2)
Для дубликатов вы можете использовать комбинацию полей в качестве хеш-ключа, не нужно объединять их как дополнительное поле.sort -t, -rnk14 -rk9 | awk -F, '!seen[$4,$5]++'
01.10.20201)
. Мне все еще нужно разделить дату (столбец 9) на год, месяц, дату, так как она разделена-
. Или я что-то упускаю? Простая сортировка столбца 14 по числовому значению также не работает, если только я не подмножу позиции, содержащие интересующее числовое значение. 01.10.2020man sort
для того, какие виды сортировки вы можете использовать для каждого поля. Для 9 это просто сортировка по алфавиту, в обратном порядке или нет, в зависимости от ваших потребностей. Для 14 я вижу только две строки примера, но они кажутся перемешанными цифрами и буквами, попробуйте -V, -h и/или найдите это, это хорошо задокументировано. 01.10.2020