Durchlaufen von Dateien und Sammeln von Daten

Durchlaufen von Dateien und Sammeln von Daten

OK, ich habe ein Problem, bei dem Sie mir bestimmt helfen können.

Ich habe 24 Ordner. Beschriftet mit Angle1, Angle2, ..., Angle24

Jeder Ordner hat den Dateinamen output.txt

In jeder Datei mit dem Namen output.txt möchte ich bestimmte Informationen erfassen.

Es gibt 10 Datenspalten mit Zahlen, aber die Zahlen haben eine variable Länge. Ich möchte die 9. Spalte mit Zahlen, aber das bedeutet nicht, dass dies nur die 9. Spalte mit Zeichen ist. Es könnten 46 Spalten sein oder so. Wie auch immer, jede Spalte ist durch ein Leerzeichen getrennt, also wäre das vielleicht nützlich.

Ich möchte eine Schleife durch Angle1, Angle2 usw. ausführen, von jedem die 9. Datenspalte abrufen und die gesamten 24 Datenspalten in eine neue Datei mit dem Namen total.txt im übergeordneten Verzeichnis einfügen.

Das ist vielleicht nicht möglich, aber ich bin nur neugierig: Ist es möglich?

Beachten Sie, dass ich Windows PowerShell verwende, aber Ubuntu verwenden könnte, wenn das einfacher ist. Wenn eine Antwort möglicherweise nicht in beiden Umgebungen funktioniert, geben Sie bitte an, für welche Umgebung sie bestimmt ist.

Antwort1

Sie geben weder das Ausgabeformat noch die gewünschten Aggregationsfunktionen an. Hier ist jedoch ein Beispielskript, das beim Beenden eine einspaltige Datei erstellt:

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

Wenn Sie die 9. Spalte jeder Datei als Spalte haben möchten, können Sie ein Skript wie dieses verwenden:

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

Dies funktioniert jedoch nur, wenn die Anzahl der Zeilen in den Eingabedateien gleich ist.

Diese Skripte laufen mit jeder Bash/Korn-Shell und funktionieren unter Linux und Cygwin.

Hier sind meine Tests. Quelldateien:

[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

Meine Skripte (bearbeitet, um meine Umgebung darzustellen):

[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

Und meine Läufe:

[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

verwandte Informationen