Como adicionar tamanhos de todos os arquivos com o mesmo nome em scripts UNIX Shell

Como adicionar tamanhos de todos os arquivos com o mesmo nome em scripts UNIX Shell

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:

  1. 12345 a_1.txt
  2. 12234 b_1.txt
  3. 32123 c_1.txt
  4. 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:

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

Agora quero adicionar tamanhos de todos os arquivos com o mesmo nome visto acima. A saída deve ser assim:

  1. 23467 um
  2. 12234b
  3. 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 2no final.


EDIT1 - explicação conforme solicitado:

O cutcomando corta cada linha com _delimitador e salva apenas a primeira parte. Você já fez isso com seu arquivo original.

Então o awkcomando encontra dois campos em cada linha. Nós os chamamostamanhoenome, mas awkrefere-se a eles como $1e $2internamente. 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 $2informa qual elemento incrementar – é um índice; otamanho $1é o valor de incremento. awké inteligente o suficiente para inicializar ao elemento 0conforme 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) awkpassa por todos os índices conhecidos ae 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

ducalcula o tamanho de todos os arquivos e -ctotaliza os tamanhos. O grep apenas extrai o total e não todos os arquivos individuais.

informação relacionada