bash: dateien_zusammenbauen
bash: dateien_zusammenbauen
Hallo Debianer,
ich habe mal wieder eines der etwas perverseren
Bashprobleme.
Ich habe ein paar Dateien mit jeweils 1 Spalte Daten.
Die Zeilenanzahl ist bei allen Dateien gleich.
Jetzt moechte ich eine Datei haben, die mir alle Spalten
nebeneinander anzeigt.
Beispiel:
Ich habe datei1 :
1
1
1
1
Ich habe datei2 :
2
2
2
2
Ich moechte eine Datei :
1 2
1 2
1 2
1 2
Ich komme zu keiner anstaendigen Loesung. Ich finde weder
bei meinen sed & awk Infos noch im Internet etwas.
Wer weiss Rat?
Gruss aus dem Schwarzen Wald
Mato
ich habe mal wieder eines der etwas perverseren
Bashprobleme.
Ich habe ein paar Dateien mit jeweils 1 Spalte Daten.
Die Zeilenanzahl ist bei allen Dateien gleich.
Jetzt moechte ich eine Datei haben, die mir alle Spalten
nebeneinander anzeigt.
Beispiel:
Ich habe datei1 :
1
1
1
1
Ich habe datei2 :
2
2
2
2
Ich moechte eine Datei :
1 2
1 2
1 2
1 2
Ich komme zu keiner anstaendigen Loesung. Ich finde weder
bei meinen sed & awk Infos noch im Internet etwas.
Wer weiss Rat?
Gruss aus dem Schwarzen Wald
Mato
Re: bash: dateien_zusammenbauen
Mit AWK:
Code: Alles auswählen
#!/bin/bash
awk '
BEGIN {
# ARRAY mit Inhalt von datei1
while ( getline < "datei1" > 0 )
{
f1_counter++
f1[f1_counter] = $1
}
}
{
print f1[NR], $1
} ' datei2
Re: bash: dateien_zusammenbauen
Du suchst paste(1).
Gruss Cae
Code: Alles auswählen
$ printf '1\n1\n1\n1\n' >1
$ printf '2\n2\n2\n2\n' >2
$ paste 1 2
1 2
1 2
1 2
1 2
$
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: bash: dateien_zusammenbauen
Geht auch so.
Wer kann das Programm verbessern:
1.) kann man "i" anders initialisieren?
2.) kann "for" auch direkt die Zeilen durchnummerieren, um statt x und i nur eine Variable zu nutzen?
3.) wie kann man das mit dem Newline besser lösen?
4.) kann man die Variable "i" auch einfacher in AWK reinbekommen?
Natürlich ist die Laufzeit des Programms nicht optimal. Bei sehr vielen Zeilen könnte man besser echte Software schreiben.
Code: Alles auswählen
i=0;for x in $(cat 1.txt);do i=$[$i+1]; awk 'NR=='"${i}"' {printf"\n" $0}' 1.txt; awk 'NR=='"${i}"' {printf" " $0}' 2.txt;done
1.) kann man "i" anders initialisieren?
2.) kann "for" auch direkt die Zeilen durchnummerieren, um statt x und i nur eine Variable zu nutzen?
3.) wie kann man das mit dem Newline besser lösen?
4.) kann man die Variable "i" auch einfacher in AWK reinbekommen?
Natürlich ist die Laufzeit des Programms nicht optimal. Bei sehr vielen Zeilen könnte man besser echte Software schreiben.
Re: bash: dateien_zusammenbauen
Warum nur vergesse ich immer und immer wieder paste.
Bin ich AWK Masochist?
Bin ich AWK Masochist?
Re: bash: dateien_zusammenbauen
Warum die eine Datei komplett in den Speicher lesen?
Wobei sich das anders als paste verhaelt, bei ungleich langen Dateien wird beim Ende der kuerzeren aufgehoert. Unhandliche Alternative:
Gruss Cae
Code: Alles auswählen
$ printf '1\n1\n1\n1\n' >1
$ printf '2\n2\n2\n2\n' >2
$ awk 'BEGIN { while (getline one < "1" && getline two < "2") print one "\t" two; }'
1 2
1 2
1 2
1 2
$
Wobei sich das anders als paste verhaelt, bei ungleich langen Dateien wird beim Ende der kuerzeren aufgehoert. Unhandliche Alternative:
Code: Alles auswählen
$ awk 'BEGIN { while (!e) {
if (!getline one < "1") { e = 1; one = ""; };
if (!getline two < "2") { e = 1; two = ""; };
print one "\t" two; }
}'
1 2
1 2
1 2
1 2
1
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: bash: dateien_zusammenbauen
Ich verneige mein Haupt (und schlage mein awk&sed Buch von Herold auf um schlauer zu werden).
Re: bash: dateien_zusammenbauen
Mein Programm war auch Müll. Danke für die Alternative.
Re: bash: dateien_zusammenbauen
paste(1) macht genau das was gewuenscht ist, es nicht zu verwenden waere ein grosser Fehler.
Ich bin ein grosser Fan von awk, aber nur weil awk vieles auf einfache Weise ermoeglicht was mit sh kompliziert oder nicht portabel ist. Die Motivation muss immer sein das Programm so einfach wie moeglich zu machen. Keiner der anderen Vorschlaege ist auch nur annaehernd so einfach wie `paste a b'.
Ich bin ein grosser Fan von awk, aber nur weil awk vieles auf einfache Weise ermoeglicht was mit sh kompliziert oder nicht portabel ist. Die Motivation muss immer sein das Programm so einfach wie moeglich zu machen. Keiner der anderen Vorschlaege ist auch nur annaehernd so einfach wie `paste a b'.
Use ed once in a while!
Re: bash: dateien_zusammenbauen
Hallo Debianer,
vielen Dank fuer die vielen Antworten.
Paste ist wirklich das, was ich gesucht habe und
Ich meine bei den uebrigen Loesungen verkuenstelt man sich
unnoetig.
an Lifi :
****Bin ich AWK Masochist?***
Grundsaetzlich ist daran doch nichts falsch.
Nochmals vielen Dank und
Gruss aus dem Schwarzen Wald,
Mato
vielen Dank fuer die vielen Antworten.
Paste ist wirklich das, was ich gesucht habe und
Ich meine bei den uebrigen Loesungen verkuenstelt man sich
unnoetig.
an Lifi :
****Bin ich AWK Masochist?***
Grundsaetzlich ist daran doch nichts falsch.
Nochmals vielen Dank und
Gruss aus dem Schwarzen Wald,
Mato
Re: bash: dateien_zusammenbauen
Wenn mich nicht alles täuscht müsste sich awk mit posix-konformem sh simulieren lassen. Ist alles turing-vollständig. Uns syscalls die awk kann, kann die sh auch.Meillo hat geschrieben:oder nicht portabel ist.
Da hast du natürlich recht. Und da stimme ich dir auch voll und ganz zu.Meillo hat geschrieben:was mit sh kompliziert
rot: Moderator wanne spricht, default: User wanne spricht.
Re: bash: dateien_zusammenbauen
Wozu? Awk ist ein (wenn auch optionaler) Teil von POSIX. Awk hat sich (wenn man oawk (vor 1985) ausklammert) ueber die Jahre wenig veraendert. Das sind gute Vorraussetzungen awk zu verwenden.wanne hat geschrieben:Wenn mich nicht alles täuscht müsste sich awk mit posix-konformem sh simulieren lassen. Ist alles turing-vollständig.Meillo hat geschrieben:oder nicht portabel ist.
Use ed once in a while!
Re: bash: dateien_zusammenbauen
Ich habe nicht gesagt das es sinnvoll ist. (Das es an vielen Stellen sinnvoll ist awk zu verwenden weil es kürzer/schöner ist finde ich richtig. Da stimme ich dir auch zu.)
Ich habe dir nur wiedersprochen, dass es nicht auch ohne geht.
Ich habe dir nur wiedersprochen, dass es nicht auch ohne geht.
rot: Moderator wanne spricht, default: User wanne spricht.
Re: bash: dateien_zusammenbauen
Habe ich gesagt, dass es nicht auch ohne geht?wanne hat geschrieben:Ich habe dir nur wiedersprochen, dass es nicht auch ohne geht.
Ich glaube hier handelt es sich um failure to communicate.
Use ed once in a while!