LINUX.ORG.RU

Как посчитать количество дублей в столбце не меняя порядка строк

 ,


0

1

Подскажите как посчитать количество одинаковых значений в столбце так, чтобы в итоге получился список строк в том же порядке и без удаленных дубликатов. sort file | uniq -c меняет порядок строк и удаляет дубликаты. попробовал пронумеровать строки cat или nl -ba file , чтобы потом можно было восстановить порядок, но все равно не понимаю как посчитать повторяющиеся строки без изменения первоначального порядка строк в столбце.

– Нужно из вот такого:
текст1
текст2

текст1

текст1
текст2
текст3

– Сделать вот такое
текст1;3
текст2;2
;2
текст1;3
;2
текст1;3
текст2;2
текст3;1

Пустые строки тоже нельзя удалять, их нужно тоже посчитать.

Был бы благодарен за помощь!!

Ответ на: комментарий от anonymous

nl -ba col4.tmp > file1.tmp

sort -k2 file2.tmp | uniq -f2 -c > file3.tmp

таким образом дубли удаляются

alexross
() автор топика

Конвертишь в csv. Загружаешь в SQL DB. Делаешь нужные запросы.

anonymous
()

питон, сознаешь defaultdict с int, открываешь файл, построчно читаешь, делаешь инкремент значения по ключу в качестве которого выступает считанная строка в конце выводишь пары ключ, значение.

anonymous
()
Ответ на: комментарий от anonymous

А, проглядел что тебе надо к оригу прицепить коунт, тогда делаешь второй проход по файлу и выводишь пару ключ, значение для каждой строки (ключу). Это тупо и влоб.

anonymous
()
from collections import defaultdict

like_a_file = [
    "текст1",
    "текст2",
    "",
    "текст1",
    "",
    "текст1",
    "текст2",
    "текст3"
]

result = defaultdict(int)

for line in like_a_file:
    result[line] += 1

for line in like_a_file:
    print(f"{line};{result[line]}")
anonymous
()
Ответ на: комментарий от alexross

На питоне я выше уже пример привел (только без открытия и чтения файла). На баше разве что сперва проход sort|unic -c с выхлопом в временный файл а потом join (но я не помню как он работает, лол)

anonymous
()
Ответ на: комментарий от alexross

sort|uniq -c а потом ориг с временным файлом join, да. Но это не точно. Я питонкод то на планшете писал в replit потому и без файла.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.