Sie sind nicht angemeldet.

1

23.04.2007, 22:11

[gelöst] awk

hallo leute,

sicherlich wird das für euch pro's kinderkacke sein - ich hänge aber seit einigen stunden an einem problem fest. und zwar habe ich ein datenfile, das durch tab's getrennte werte enthält. ich möchte jetzt jede zeile durchgehen und immer den wert in der ersten spalte checken. dazu hab ich erst die zeilen meines files zählen lassen und mit einer schleife wolte ich dann mit einer laufvariable die einzelnen zeilen abgrasen. der befehl dazu ist:

awk 'NR==$n {print $1}' <file>

das n ist meine schleifen - lauf - variable, die sich pro durchlauf um eins erhöht. leider akzeptiert der zeilenvariable NR diese zuweisung nicht.

mein erster versuch $n duch `echo $n` zu ersetzen trug zwar früchte, geht aber in meiner eigentlichen zuweisung nicht zu verwenden, da ich das ergebnis noch einer variable zuweisen möchte. also hätte ich dann zwei mal diese anführungsstriche hintereinander. es soll mal dieser ausdruck funktionieren:

wert=`awk 'NR==$n {print $1}' <file> `

wäre toll, wenn mir einer von euch schlauen köpfen helfen könnte.

gruß
thomas

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

2

23.04.2007, 22:14

RE: awk

vielleicht erklärst du mal, was du eigentlich machen willst und gibst mal ein beispielabzug der datei, die bearbeitet werden soll.
es ist nicht ganz klar, warum du die zeuilen mit einem index laufen lassen willst, awk arbeitet ja sowieso zeilenorientiert.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

3

24.04.2007, 09:56

RE: awk

ok - die datei hat folgenden aufbau.

Buchstaben..........Buchstaben.........Buchstaben

Ziffer Ziffer Ziffer
Ziffer Ziffer Ziffer

Insgesamt ca. 150'000 Zeilen und 17 Spalten.

Ich möchte den Wert jeder Zeile in Spalte 1 mit einem vordefinierten Wert vergleichen. Wird die Vergleichsbedingung erfüllt, sollen die bisher geprüften Zeilen in ein neues File geschrieben werden. Das ganze soll wiederholt werden, bis das Ende der Datei erreicht ist.

Außerdem soll dann mit dem Wert in Spalte 1 ein zweites Fileähnlicher Struktur durchsucht werden. Da auch wieder Spalte 1. Wird eine Übereinstimmung festgestellt, soll mir die gesamte Zeile zur Verfügung stehen.

Ich hoffe es ist jetzt einigermaßen klar was ich machen will ?! :crazy:

4

24.04.2007, 10:27

hab noch ne andere idee, werde das mit grep erledigen. trotzdem bleibt das problem:
wie kann ich eine zeile gezielt ansprechen, ohne daß ich NR eine feste zahl zuweise. wie muß die zuweisung aussehen, wenn ich da mit ner variable arbeiten will???

danke für eure hilfe

gruß thomas

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

5

24.04.2007, 15:42

siehe
man awk, mit der option -v variable definieren und im awk-script verwenden

Zitat

-v var=val
--assign var=val
Assign the value val to the variable var, before
execution of the program begins. Such variable
values are available to the BEGIN block of an AWK
program.


ich würde das auch mit einem shell-script erledigen. datei durch eine while read schleife einlesen lassen und dann die einzelnen zeilen testen und ausgeben.
easy.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

6

03.05.2007, 12:34

ja - hast recht. beide lösungen sind eigentlich super trivial.

danke dir. :applaus:

Thema bewerten