Percorrendo arquivos e coletando dados

Percorrendo arquivos e coletando dados

Ok, tenho um problema que acho que vocês podem ajudar.

Eu tenho 24 pastas. Rotulado Ângulo1, Ângulo2, ..., Ângulo24

Cada pasta tem um nome de arquivo output.txt

Em cada arquivo chamado output.txt, quero obter certas informações.

Existem 10 colunas de dados com números, mas os números têm comprimento variável. Quero a 9ª coluna de números, mas isso não significa que seja apenas a 9ª coluna de caracteres. Podem ter 46 colunas ou algo assim. De qualquer forma, cada coluna é separada por um espaço em branco, então talvez isso seja útil.

Quero percorrer Angle1, Angle2 etc. e obter a 9ª coluna de dados de cada um e colocar o total de 24 colunas de dados em um novo arquivo no diretório pai chamado total.txt.

Isso pode não ser possível, mas só por curiosidade - é possível?

Observe que estou usando o Windows PowerShell, mas poderia usar o Ubuntu se for mais fácil. Se alguma resposta não funcionar em ambos os ambientes, indique a qual ambiente se destina.

Responder1

Você não especifica o formato de saída e/ou se deseja algumas funções de agregação, mas um exemplo de script que criará como saída um arquivo de coluna é:

for ((i=1;i<25;i++))
do
awk '{print $9}' Angle${i}/output.txt >>total.txt
done

Se você quiser ter a nona coluna de cada arquivo como coluna, você pode usar um script como este:

awk '{print $9}' Angle1/output.txt >>tmp
for ((i=2;i<25;i++))
do
awk '{print $9}' Angle${i}/output.txt |paste -d " " tmp - >>total.txt
mv total.txt tmp
done
mv tmp total.txt

Mas isso funcionará bem apenas se você tiver o mesmo número de linhas nos arquivos de entrada.

Esses scripts serão executados com qualquer shell Bash/Korn e funcionarão em Linux e Cygwin.

Aqui estão meus testes. Arquivos Fonte:

[romeo@localhost tmp]$ cat PKA1/output.txt 
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
[romeo@localhost tmp]$ cat PKA2/output.txt 
3 4 5 6 7 8 9 0 1 2 
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
[romeo@localhost tmp]$ cat PKA3/output.txt 
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7

Meus scripts (editados para representar meu ambiente):

[romeo@localhost tmp]$ cat z1
for ((i=1;i<4;i++))
do
awk '{print $9}' PKA${i}/output.txt >>total.txt
done
[romeo@localhost tmp]$ cat z2
awk '{print $9}' PKA1/output.txt >>tmp
for ((i=2;i<4;i++))
do
awk '{print $9}' PKA${i}/output.txt |paste -d " " tmp - >>total.txt
mv total.txt tmp
done
mv tmp total.txt

E minhas corridas:

[romeo@localhost tmp]$ rm total.txt 
[romeo@localhost tmp]$ bash z1
[romeo@localhost tmp]$ cat total.txt 
9
0
1
1
2
3
4
5
6
[romeo@localhost tmp]$ rm total.txt 
[romeo@localhost tmp]$ bash z2
[romeo@localhost tmp]$ cat total.txt 
9 1 4
0 2 5
1 3 6

informação relacionada