
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:
- 12345 a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 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í:
- 12345 un
- 12234b
- 32123c
- 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í:
- 23467 un
- 12234b
- 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 2
al final.
EDITAR1 - explicación según lo solicitado:
El cut
comando corta cada línea con _
un delimitador y guarda solo la primera parte. Ya lo has hecho con tu archivo original.
Luego, el awk
comando encuentra dos campos en cada línea. Nosotros los llamamostamañoynombre, pero awk
se refiere a ellos como $1
e $2
internamente. Por cada línea, incrementa un elemento de una matriz a
(el nombre a
se elige arbitrariamente y no tiene nada que ver con el nombre del archivo en la muestra). Elnombre $2
indica qué elemento incrementar: es un índice; eltamaño $1
es el valor de incremento. awk
es lo suficientemente inteligente a
como para inicializar el elemento 0
como 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), awk
revisa cada índice conocido a
e 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
du
calcula el tamaño de todos los archivos y luego -c
suma los tamaños. El grep simplemente extrae el total en lugar de todos los archivos individuales.