Cómo agregar tamaños de todos los archivos con el mismo nombre en scripts de UNIX Shell

Cómo agregar tamaños de todos los archivos con el mismo nombre en scripts de UNIX Shell

Soy nuevo aquí y quiero preguntar cómo agregar tamaños de archivos con el mismo nombre. Los nombres de mis archivos en realidad son diferentes entre sí, pero los corté para poder obtener archivos agrupados.

aquí están mis archivos originales con tamaños (muestra)

sample.txt tiene estos datos dentro:

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

Ahora corto los nombres de archivos dentro de sample.txt para eliminar esos caracteres que comienzan desde '_' (guion bajo). Se vuelven así:

  1. 12345 un
  2. 12234b
  3. 32123c
  4. 11122 un

Ahora quiero agregar tamaños de todos los archivos con el mismo nombre de archivo como se ve arriba. La salida debería ser así:

  1. 23467 un
  2. 12234b
  3. 32123c

Por favor ayuda. Muchas gracias chicos. Estoy atrapado aquí por horas

Respuesta1

Suponiendo que no hay números de línea en sample.txt:

cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'

Quizás quieras agregar | sort -k 2al final.


EDITAR1 - explicación según lo solicitado:

El cutcomando corta cada línea con _un delimitador y guarda solo la primera parte. Ya lo has hecho con tu archivo original.

Luego, el awkcomando encuentra dos campos en cada línea. Nosotros los llamamostamañoynombre, pero awkse refiere a ellos como $1e $2internamente. Por cada línea, incrementa un elemento de una matriz a(el nombre ase elige arbitrariamente y no tiene nada que ver con el nombre del archivo en la muestra). Elnombre $2indica qué elemento incrementar: es un índice; eltamaño $1es el valor de incremento. awkes lo suficientemente inteligente acomo para inicializar el elemento 0como se menciona por primera vez. El elemento particular se incrementa cada vez que su índice (nombre) aparece como un segundo campo de la línea de entrada. Al final (después de la última línea de la entrada), awkrevisa cada índice conocido ae imprime el valor (que ahora estamaño acumulativo) y un índice (nombre).

Respuesta2

Para obtener el total de cada archivo a partir de a_ usted puede hacer esto:

du -c a_*  | grep total

ducalcula el tamaño de todos los archivos y luego -csuma los tamaños. El grep simplemente extrae el total en lugar de todos los archivos individuales.

información relacionada