Хорошо, оказывается, это нормально. Подробнее в комментарии здесь:
https://ask.fedoraproject.org/en/question/110941/how-to-sorten-bootloader-list/
Actually, from what you're showing, it only has three Fedora kernels listed, and even if you do nothing, it will stay that way, with the oldest kernel removed every time a new one's installed. This is a safety feature in case there's a problem with a new kernel because you should always have two known good kernels to use instead. My advice is to simply leave things alone and don't worry about it. — sideburns (CC-BY-SA)
Эта команда удалит весь текст перед уникальным идентификатором, затем подсчитает количество вхождений уникальных идентификаторов и создаст их список, отсортированный в порядке возрастания появления:
cat log1 log2... logN | sed 's/^.* is related to //' | sort | uniq -c | sort -n
Если текст между «Some _ID» и «Unique _ID» действительно постоянный, то следующее должно работать (другими словами, например, нет метки времени):
cat log1 log2... | grep "Some_ID" | sort | uniq -c | sort -n
Если я правильно понимаю, вы хотите получить идентификаторы, мы можем сделать это с помощью sed
и засунуть их в цикл while в grep
и wc
.
cat files | sed -e 's/.*is related to //g' \
| while IFS= read -r ID; do
count=`grep $ID files | wc -l`
echo "$ID = $count"
done
Из вашего вопроса и ваших разъяснений в комментариях я понимаю, что ваша проблема заключается в том, что вы ищете количество уникальных отношений. Итак, если задан файл следующим образом:
345 is related to 123
678 is related to 123
187 is related to 732
678 is related to 123
Результат должен быть 3. Для этого sort
, uniq
, cat
, wc
, и оператор трубы будет вашим другом.
Если все файлы, которые вы хотите найти, находятся в одной папке, вы можете просто использовать*
(оператор подстановки )для поиска каждого файла. Например, cat *
распечатает содержимое каждого файла в текущем каталоге. Вы также можете указать несколько файлов, перечислив их. cat file1.txt file2.txt
напечатает как file1
, так и file2
. Это можно комбинировать с подстановочным знаком для указания файлов в определенных подкаталогах :cat dir1/* dir3/*
(, пропускаяdir2/
). Вы также можете указать, что частичное имя файла:cat file*
будет соответствовать file1
и file123
, но не afile
.
Используя описанное выше, вы можете включить любые файлы, которые вы хотите, во входные данные для sort
. Оператор конвейера(|
)принимает вывод одной команды и направляет его на ввод другой. cat file1 | sort
сортирует содержимое file1
. Затем вы можете передать это в uniq
, чтобы отфильтровать все повторяющиеся записи, а затем подсчитать строки с wc
, например:cat file1 | sort | uniq | wc -l
.
Используя приведенный выше пример файла, команда sort
изменит вывод на:
187 is related to 732
345 is related to 123
678 is related to 123
678 is related to 123
uniq
удалит повторяющиеся записи (в этом примере внизу):
187 is related to 732
345 is related to 123
678 is related to 123
и wc -l
посчитают строки и вернут 3
.
ПРИМЕЧАНИЕ.:При этом123 is related to 321
и321 is related to 123
будут считаться двумя отдельными отношениями. Если вы хотите обойти это, вам нужно будет сделать что-то более сложное, включая анализ входных данных и организацию записей в таблицу или хэш-карту.
Кроме того, при очень больших входных данных эта цепочка команд, скорее всего, зависнет и будет выглядеть так, как будто она зависла. Если вы используете большие наборы входных данных, я бы рассмотрел возможность настройки базы данных для управления данными, так как это позволит вам использовать запросы для выполнения этого типа поиска намного быстрее.