
Sou novo aqui e quero perguntar como adicionar tamanhos de arquivos com o mesmo nome? Na verdade, meus nomes de arquivos são diferentes um do outro, mas eu os cortei para poder obter arquivos agrupados.
aqui estão meus arquivos originais com tamanhos (amostra)
sample.txt contém estes dados:
- 12345 a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122 a_2.txt
Agora cortei os nomes dos arquivos dentro de sample.txt para remover os caracteres começando com '_' (sublinhado). Eles ficam assim:
- 12345 um
- 12234b
- 32123c
- 11122 um
Agora quero adicionar tamanhos de todos os arquivos com o mesmo nome visto acima. A saída deve ser assim:
- 23467 um
- 12234b
- 32123c
Por favor ajude. Muito obrigado pessoal. Estou preso aqui há horas
Responder1
Supondo que não haja números de linha em sample.txt
:
cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'
Você pode querer adicionar | sort -k 2
no final.
EDIT1 - explicação conforme solicitado:
O cut
comando corta cada linha com _
delimitador e salva apenas a primeira parte. Você já fez isso com seu arquivo original.
Então o awk
comando encontra dois campos em cada linha. Nós os chamamostamanhoenome, mas awk
refere-se a eles como $1
e $2
internamente. Para cada linha ele incrementa um elemento de um array a
(o nome a
é escolhido arbitrariamente e não tem nada a ver com o nome do arquivo na amostra). Onome $2
informa qual elemento incrementar – é um índice; otamanho $1
é o valor de incremento. awk
é inteligente o suficiente para inicializar a
o elemento 0
conforme mencionado pela primeira vez. O elemento específico é incrementado toda vez que seu índice (nome) aparece como um segundo campo da linha de entrada. No final (após a última linha da entrada) awk
passa por todos os índices conhecidos a
e imprime o valor (que agora étamanho cumulativo) e um índice (nome).
Responder2
Para obter o total de cada arquivo começando com a_
você poderia fazer isso:
du -c a_* | grep total
du
calcula o tamanho de todos os arquivos e -c
totaliza os tamanhos. O grep apenas extrai o total e não todos os arquivos individuais.