Как найти наиболее часто встречающееся слово в файле .csv, игнорируя дубликаты в каждой строке?

Частичный ответ, в основном основанный на вашей информации о том, что тачпад подключен через I2C:

Даже без i2c_hidвы должны видеть шины I2C (ses )и общаться с устройствами (s )на них. Пакет lm-sensorsсодержит программы, связанные с I2C, как и i2c-tools. Установите, прочитайте справочные страницы для i2cdetect, i2cdump, i2cget, i2cset.

Возможно, вам придется проверить модули I2C, например. i2c-dev, если они не встроены в ваше ядро. После этого вы должны увидеть что-то в /sys/bus/i2c/devices/и иметь соответствующие узлы устройств в /dev/i2c*. Теперь вам нужно выяснить, какие устройства I2C у вас есть (их, вероятно, довольно много :управление вентилятором, датчики температуры, BIOS EEPROM и т. д. ), и что такое тачпад. Информация из драйвера Windows может помочь.

Следующим шагом будет чтение исходного кода i2c_hid, выяснение, существуют ли какие-либо стандартизированные протоколы, поиск документации в Google и попытка отправки и получения байтов. Заодно выясните, почему i2c_hidмешает загрузке компьютера. Для этого вам нужно уметь читать и писать код C.

i8042 — это устаревший контроллер PS/2, он вообще не связан с I2C. Если тачпад не подключен через I2C и этого контроллера, возня с ядром i8042 вообще не поможет.

Редактировать

Я немного погуглил.HID через I2C здесь(видимо что-то от Microsoft ). Как только вы наладите работу HID через I2C, вам также следует прочитать спецификацию HID . В частности, посмотрите на дескрипторы HID. Часто HID-устройства имеют причуды, когда отчеты (данные тачпада )не совсем стандартны.

14
03.06.2020, 00:41
2 ответа

Я бы использовал для этого Python. Причина в том, что код легко читать и модифицировать.

import collections
import operator
import sys

word_count = collections.Counter()

with open(sys.argv[1]) as f:
    for l in f:
        words = set(l.strip().split(','))
        word_count.update(words)

words_kv = word_count.items()
words_kv = sorted(words_kv, key = operator.itemgetter(0)) # First sort alphabetically.
words_kv = sorted(words_kv, key = operator.itemgetter(1), reverse = True) # Then sort by most common.
# Then end result is a list that is sorted first by most common then alphabetically. The reason this works is because sorting is stable in Python according to: https://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts

for word, count in words_kv:
    print(count, word)

Выход:

2 blue
2 green
2 red
1 brown
1 yellow
2
18.03.2021, 23:31

Вы можете придерживаться предложенного решения с небольшими изменениями в строке счета -по -строке:

$ while read line; do echo $line | tr, '\n' | sort | uniq; done <file.csv | sort | uniq -c | sort -nr
      2 red
      2 green
      2 blue
      1 yellow
      1 brown

Он делает то же самое, что и код, который вы предоставили, за исключением того, что он выполняет uniqчасть каждой строки за раз, а затем считает в конце.

-1
18.03.2021, 23:31

Теги

Похожие вопросы