Zum Inhalt springen

Vergleiche in awk


D-Styles

Empfohlene Beiträge

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...