Looping através de arquivos e coleta de dados

0

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

Eu tenho 24 pastas. Ângulo marcado1, Ângulo2, ..., Ângulo24

Cada pasta tem um nome de arquivo output.txt

Em cada arquivo chamado output.txt, quero pegar algumas informações.

Existem 10 colunas de dados com números, mas os números são de comprimento variável. Eu quero a 9ª coluna de números, mas isso não significa que esta seja apenas a 9ª coluna por caracteres. Pode ser de 46 colunas ou algo assim. De qualquer forma, cada coluna é separada por um espaço em branco, talvez isso seja útil.

Eu 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 apenas curioso - é possível?

Observe que estou usando o Windows PowerShell, mas posso usar o Ubuntu se isso for mais fácil. Se alguma resposta não funcionar nos dois ambientes, indique para qual ambiente ela se destina.

    
por Jackson Hart 16.05.2015 / 05:16

1 resposta

2

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 um arquivo de coluna de saída é:

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

Se você quiser ter a 9ª 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 no Linux e no Cygwin.

Aqui estão meus testes. Arquivos de origem:

[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
    
por 16.05.2015 / 06:11