PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit awk in Spalten schreiben



error
17-03-2005, 09:53
Hallo

Ich habe folgende Dateistruktur vorliegen:
A1
B1
C1
A2
B2
C2
A3
B3
C3

und möchte folgende Ausgabe erzeugen:

A1 A2 A3
B1 B2 B3

C1 C2 C3

wie bekomme ich dass nun hin?

Hans-Georg Normann
17-03-2005, 19:28
Ich denke, du hast noch mehr Datensätze. Ich habe das hier so gelöst, das ich drei temporäre Dateien anlege. In die schreibe ich ersteinmal die Zwischenergebnisse. Nach Beendigung der Schreibvorgänge müssen die Dateien gschlossen werden.

Das Script kann man bestimmt auch wesentlich komplexer gestalten, aber ich hoffe so versteht es jeder. Ich habe das awk Script mysort.awk und die dazugehörige Datendatei my.dat genannt.

// { writeTmp() }

BEGIN {
f1 = "/tmp/file1.tmp"
f2 = "/tmp/file2.tmp"
f3 = "/tmp/file3.tmp"
i = 1

printf("") > f1
printf("") > f2
printf("") > f3
}

END {
printf("\n") >> f1
printf("\n") >> f2
printf("\n") >> f3
close(f1)
close(f2)
close(f3)

#Ausgabe
getline s <f1
print s
getline s <f2
print s
getline s <f3
print s

}

function writeTmp() {
if (i==1) {
printf("%s ", $0) >> f1
i++
} else if (i==2) {
printf("%s ", $0) >> f2
i++
} else if (i==3) {
printf("%s ", $0) >> f3
i++
}

if (i>3) i=1
}

Aufruf: awk -f mysort.awk my.dat

Hans

Jasper
17-03-2005, 19:29
$ cat c
A1
B1
C1
A2
B2
C2
A3
B3
C3

$ awk '{ I = N % 3; if(I in A) A[I] = A[I] " " $0; else A[I] = $0; N++ } END { for(I in A) print A[I] }' c
A1 A2 A3
B1 B2 B3
C1 C2 C3


über N % X, 1> X > inf lässt sich die anzahl der zusammenzufassenden zeilen steuern.


-j