
Я новичок здесь и хочу спросить, как добавить размеры файлов с одинаковым именем? Мои имена файлов на самом деле отличаются друг от друга, но я их обрезал, чтобы получить файлы, сгруппированные вместе.
вот мои оригинальные файлы с размерами (пример)
В файле sample.txt содержатся следующие данные:
- 12345 а_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122 а_2.txt
Теперь я обрезаю имена файлов внутри sample.txt, чтобы удалить эти символы, начинающиеся с '_' (подчеркивание). Они становятся такими:
- 12345 а
- 12234 б
- 32123 с
- 11122 а
Теперь я хочу добавить размеры всех файлов с одинаковым именем, как показано выше. Вывод должен быть таким:
- 23467 а
- 12234 б
- 32123 с
Помогите, пожалуйста. Большое спасибо, ребята. Я застрял здесь на несколько часов.
решение1
sample.txt
Предположим, что в : нет номеров строк .
cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'
Вы можете добавить | sort -k 2
в конце.
EDIT1 - пояснение по запросу:
Команда cut
вырезает каждую строку с _
разделителем и сохраняет только первую часть. Вы уже сделали это с вашим исходным файлом.
Затем awk
команда находит два поля в каждой строке. Мы называем ихразмериимя, но awk
ссылается на них как на $1
и $2
внутри. Для каждой строки он увеличивает один элемент массива a
(имя a
выбирается произвольно и не имеет ничего общего с именем файла в образце).имя $2
сообщает, какой элемент увеличивать — это индекс;размер $1
является значением приращения. awk
достаточно умен, чтобы инициализировать a
элемент, 0
как упоминается в первый раз. Конкретный элемент увеличивается каждый раз, когда его индекс (имя) появляется как второе поле входной строки. В конце (после последней строки ввода) awk
проходит по всем известным индексам a
и печатает значение (которое теперьсовокупный размер) и индекс (имя).
решение2
Чтобы получить общее количество файлов, начиная с a_
you, можно сделать следующее:
du -c a_* | grep total
du
вычисляет размер всех файлов, а затем -c
суммирует размеры. Grep просто извлекает общую сумму, а не все отдельные файлы.