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

0

Sou novo aqui e quero perguntar como adicionar tamanhos de arquivos com o mesmo nome? Meus nomes de arquivos são realmente diferentes uns dos outros, mas eu os recortei para que pudesse obter arquivos agrupados.

aqui estão meus arquivos originais com tamanhos (amostra)

exemplo.txt tem esses dados dentro:

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

Agora eu cortei os nomes dos arquivos dentro de sample.txt para remover esses caracteres a partir de '_' (sublinhado). Eles se tornam assim:

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

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

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

Por favor ajude. Muito obrigado pessoal. Estou preso aqui por horas agora

    
por Zero Darbelll 19.04.2016 / 06:06

2 respostas

0

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 adicionar | sort -k 2 no final.

EDIT1 - explicação conforme solicitado:

O comando cut corta todas as linhas com _ delimitador e salva somente a primeira parte. Você já fez isso com o seu arquivo original.

Em seguida, o comando awk localiza dois campos em cada linha. Nós os chamamos tamanho e nome , mas awk refere-se a eles como $1 e $2 internamente. Para cada linha, incrementa-se um elemento de uma matriz a (o nome a é arbitrariamente escolhido e não tem nada a ver com o nome do arquivo na amostra). O nome $2 informa qual elemento incrementar - é um índice; o tamanho $1 é o valor de incremento. awk é inteligente o suficiente para inicializar o elemento a com 0 , como é mencionado pela primeira vez. O elemento particular é 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 de a e imprime o valor (que é agora tamanho cumulativo ) e um índice ( nome ).

    
por 19.04.2016 / 07:40
0

Para obter o total de todos os arquivos que começam com a_ , você pode fazer isso:

du -c a_*  | grep total

du calcula o tamanho de todos os arquivos, então -c totaliza os tamanhos. O grep apenas extrai o total em vez de todos os arquivos individuais.

    
por 19.04.2016 / 06:10

Tags