D-Styles Geschrieben 21. Oktober 2004 Teilen Geschrieben 21. Oktober 2004 hi, ich noch einmal. ich schreibe gerade ein skript, daß 2 Textateien von je ca. 50mb mit unterschiedlichem aufbau vergleicht und alle kundengruppen ausgibt, die in der einen existieren, jedoch nicht in der anderen vorhanden sind. (sind glaub ich sql tabellen) funktioniert auch so weit, daß ding ist nur, daß es zu problemen kommt, wenn eine kundengruppe leerzeichen enthält oder 2 gruppennamen mit dem selben muster beginnen. doch lange rede kurzer sinn, am besten ich erklär mein prob wieder an einem beispiel : ich habe eine datei : personen.txt Meier Schmidt Leo Ingo und eine datei : kundenliste.txt Heinz Müller Gerhard Meier Karsten Schmidt Hannes Teo Leo Pilz Bingo Ingo in einem skript lese ich die datei personen.txt zeilenweise aus und übergebe den jeweiligen namen der variable $line. dann prüfe ich, ob der name in $line == einem namen in der zweiten spalte in kundenliste ist. ist das der fall wird die gesamte zeile aus kundenliste.txt ausgegeben. #!/bin/bash while read line do awk '$2 ~ /'$line'/ {print $0}' kundenliste.txt #awk '$2 == '$line' {print $0}' kundenliste.txt done < personen.txt das problem ist jetzt wieder ein frage der schreibweise. starte ich das skript wie oben angegeben und prüfe, ob die 2. spalte aus kundenliste mit dem kundennamen in $line beginnt, funktioniert es. mike@linux:/share/tausch/Mitarbeiter/michael/STOLL_DIFF/fisi> ./diff_fiboard Gerhard Meier Karsten Schmidt Bingo Ingo mike@linux:/share/tausch/Mitarbeiter/michael/STOLL_DIFF/fisi> kommentiere ich die erste zeile aus und prüfe mit der zweiten zeile, ob die 2.spalte aus der kundenliste == dem kundennamen ist, gibt mir das skript nichts aus. mike@linux:/share/tausch/Mitarbeiter/michael/STOLL_DIFF/fisi> ./diff_fiboard mike@linux:/share/tausch/Mitarbeiter/michael/STOLL_DIFF/fisi> weiß jemand rat, was ich tun muss, damit die zweite zeile funktioniert ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
alligator Geschrieben 26. Oktober 2004 Teilen Geschrieben 26. Oktober 2004 Hallo, ich konnte das Problem nachstellen und weiß auch wo das Problem liegt. $linie wird als $0 interpretiert. Um Variable von der Shell in den awk zu übergeben gibts 2 Möglichkeiten 1: awk -v $awkvar=$shellvar ' {print $awkvar} kundenliste.txt 2: awk ' {print $awkvar} $awkvar=$shellvar kundenliste.txt Dennoch ist das komischerweise nicht die Lösung, denn irgendwie wird dennoch $awkvar als $0 interpretiert bei deinem Beispiel. Ich bin gerade ebenfalls ratlos und übersehe den Fehler ebenfalls. Werde mich aber beizeiten nochmal ransetzen ... cya alligator Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Styles Geschrieben 26. Oktober 2004 Autor Teilen Geschrieben 26. Oktober 2004 hallo, danke für deine hilfe. wäre nett, wenn du dich einmal ransetzen könntest :-) ich habe mich jetzt in letzter zeit viel mit awk beschäftigt und habe bisher noch keine lösung gefunden. mfg mike =========================================== EDIT *JUPPI* anstelle von awk '$2 [B]==[/B] '$line' {print $0}' kundenliste.txt vergleiche ich die variablen jetzt ganz 'bash-typisch' mit awk '$2 [B]eq[/B] '$line' {print $0}' kundenliste.txt ich weiß, es ist mehr eine improvisierte lösung, aber es funktioniert :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
D-Styles Geschrieben 26. Oktober 2004 Autor Teilen Geschrieben 26. Oktober 2004 oh manno.........%//§&&§)/§(§$/=$= es funktioniert - ohne fehlermeldung, allerdings erhalte ich dann nicht mehr die gewünschten ausgaben. werd mich also noch einmal ransetzen. ....wär auch zu schön gewesen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shutdown-Frnow Geschrieben 27. Oktober 2004 Teilen Geschrieben 27. Oktober 2004 file1: > cat file1 blasd ewfwf wegew gewg ingo dubingo heinz harald heinz becker dschingis khan heino turbonegro beavis butthead file2: > cat file2 wegew gewg ingo dubingo heinz harald script: while read line; do bla=`grep "$line" file2`; if [[ $bla != $line ]]; then echo "$line"; fi; done < file1 output: blasd ewfwf heinz becker dschingis khan heino turbonegro beavis butthead das sind jetzt nur die zeilen die in file1 sind, nicht aber in file2 wenn du nur in einer bestimmten spalte suchen willst, dann musste halt noch mit awk eine zwischenvariable einlesen. so beispielsweise für die 5. spalte while read line; do bla=`grep "$line" file2|awk '{print $5}'`; if [[ $bla != $line ]]; then echo "$line"; fi; done < file1 ist zwar nicht mit awk, aber das funzt ... schau halt mal obs dir hülft geht wie du siehst auch mit leerzeichen und gleichen zeilenanfängen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.