Recorrer archivos y recopilar datos

Recorrer archivos y recopilar datos

Ok, tengo un problema con el que creo que ustedes pueden ayudarme.

Tengo 24 carpetas. Ángulo etiquetado1, Ángulo2, ..., Ángulo24

Cada carpeta tiene un nombre de archivo salida.txt

En cada archivo llamado salida.txt, quiero tomar cierta información.

Hay 10 columnas de datos con números, pero los números tienen una longitud variable. Quiero la novena columna de números, pero esto no significa que sea solo la novena columna de caracteres. Podrían ser 46 columnas o algo así. De todos modos, cada columna está separada por un espacio en blanco, por lo que quizás eso sea útil.

Quiero recorrer Angle1, Angle2, etc. y obtener la novena columna de datos de cada uno y colocar el total de 24 columnas de datos en un nuevo archivo en el directorio principal llamado total.txt.

Puede que esto no sea posible, pero por curiosidad: ¿es posible?

Tenga en cuenta que estoy usando Windows PowerShell pero podría usar Ubuntu si fuera más fácil. Si alguna respuesta puede no funcionar en ambos entornos, indique para qué entorno es.

Respuesta1

No especifica el formato de salida y/o si desea algunas funciones de agregación, pero un script de ejemplo que creará como salida un archivo de columna es:

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

Si desea tener la novena columna de cada archivo como columna, puede usar un 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

Pero esto funcionará bien solo si tiene la misma cantidad de filas en los archivos de entrada.

Estos scripts se ejecutarán con cualquier shell Bash/Korn y funcionarán en Linux y Cygwin.

Aquí están mis pruebas. Archivos fuente:

[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

Mis scripts (editados para representar mi entorno):

[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

Y mis carreras:

[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

información relacionada