Я новичок здесь, и я хочу спросить, как добавить размеры файлов с тем же именем? Мои имена файлов на самом деле отличаются друг от друга, но я обрезал их, чтобы получить сгруппированные файлы.

вот мои оригинальные файлы с размерами (образец)

sample.txt содержит эти данные внутри:

  1. 12345 a_1.txt
  2. 12234 b_1.txt
  3. 32123 c_1.txt
  4. 11122 a_2.txt

Теперь я вырезал имена файлов внутри sample.txt, чтобы удалить эти символы, начинающиеся с '_' (подчеркивание). Они становятся такими:

  1. 12345
  2. 12234 б
  3. 32123 с
  4. 11122 а

Теперь я хочу добавить размеры всех файлов с тем же именем файла, как показано выше. Вывод должен быть таким:

  1. 23467 а
  2. 12234 б
  3. 32123 с

Пожалуйста помоги. Большое спасибо, ребята. Я застрял здесь на несколько часов

2 ответа2

0

Чтобы получить сумму каждого файла, начинающегося с a_ вы можете сделать это:

du -c a_*  | grep total

du определяет размер всех файлов, а -c суммирует размеры. Grep просто извлекает общее количество, а не все отдельные файлы.

0

Предполагая, что в 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 разрезает каждую строку с помощью _ delimiter и сохраняет только первую часть. Вы уже сделали это с вашим оригинальным файлом.

Затем команда awk находит два поля в каждой строке. Мы называем их размер и имя, но awk именует их внутренне как $1 и $2 . Для каждой строки он увеличивает один элемент массива a (имя a выбирается произвольно и не имеет ничего общего с именем файла в образце). Имя $2 говорит, какой элемент увеличивать - это индекс; размер $1 является значением приращения. awk достаточно умен , чтобы инициализировать элемент с a , как это упоминается в первый раз. Конкретный элемент увеличивается каждый раз, когда его индекс (имя) появляется в качестве второго поля строки ввода. В конце (после последней строки ввода) 0 просматривает все известные индексы awk и печатает значение (которое теперь является кумулятивным размером) и индекс (имя).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .