myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Bash Shell Zeilenweise auslesen

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 25.04.13, 10:15   #1
struchli
Erfahrener Newbie
 
Benutzerbild von struchli
 
Registriert seit: Dec 2010
Ort: Luzern, Schweiz
Beiträge: 144
Bedankt: 553
struchli ist noch neu hier! | 0 Respekt Punkte
Standard Bash Shell Zeilenweise auslesen

Hallo Zusammen

Ich habe folgendes Problem:
Ich möchte eine Datei zeilenweise auslesen und jede Zeile als Pattern für grep verwenden. Die Resultate möchte ich dann in ein File schreiben.
Für das Zeilenweise Auslesen einer Datei habe ich schon etwas gefunden. Leider funktioniert es nicht wie gewünscht.
Code:
#!/bin/bash
#exec 2>&1
#set -vx
#PS4='[nsc: 19]+ '
#export PS4
for line in `cat /tmp/Organisation.txt`;do
    grep $line /tmp/MIT_TMP.tmp >> /tmp/MIT_ALL_DATE.txt
done
Den grep-Befehlt funktioniert so, wenn er nicht im S***** steht. Auch das zeilenweise Auslesen habe ich mit einem echo $line getestet und funktioniert einwandfrei.
Wenn ich das S***** ausführe, läuft es unendlich lange, macht aber gar nichts.
Die Datei Organisation.txt hat ca. 6000 Zeilen und auf jeder Zeile steht eine Nummer.
Die Datei MIT_TMP.tmp hat ca. 10'000'000 Zeilen.
Das System ist AIX.

Kann mir jemand weiterhelfen?

Vielen Dank für die Hilfe Gruss struchli
__________________
Win7 x64 + Ubuntu 11.04 AMD Phenom X4 Black Edition 955, 8GB RAM, Asus 5770
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Falls Links down sein sollten bitte PN!
struchli ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 11:37   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.857
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Mit awk als netter Einzeiler:

PHP-Code:
awk '{ print $0}' Quelle grep WasDuGrepenWillst >> Ziel 
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 11:58   #3
struchli
Erfahrener Newbie
 
Benutzerbild von struchli
 
Registriert seit: Dec 2010
Ort: Luzern, Schweiz
Beiträge: 144
Bedankt: 553
struchli ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von spartan-b292 Beitrag anzeigen
Mit awk als netter Einzeiler:

PHP-Code:
awk '{ print $0}' Quelle grep WasDuGrepenWillst >> Ziel 
So funktioniert das leider nicht. Ich habe es vielleicht nicht genau genug erklärt.

In der Datei Organisation.txt hat es ca. 6'000 Zeilen auf jeder Zeile steht eine Nummer (z.B. 4003755846) diese Nummer wiederum ist irgendwo in der Datei MIT_TMP.tmp vorhanden. Die Zeile, auf der diese Nummer vorkommt, möchte ich in eine Datei schreiben.

Der grep-Befehl, der in meinem S***** steht, funktioniert auch super, wenn ich ihn auf der promt eingebe mit einer beliebigen Nummer.

Trozdem vielen Dank für deine Mühe
__________________
Win7 x64 + Ubuntu 11.04 AMD Phenom X4 Black Edition 955, 8GB RAM, Asus 5770
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Falls Links down sein sollten bitte PN!
struchli ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 12:06   #4
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.857
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Ich verstehs immer noch nicht. Kannst du vllt mal ein Beispiel geben, mit Auszügen aus den Dateien?
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 12:13   #5
struchli
Erfahrener Newbie
 
Benutzerbild von struchli
 
Registriert seit: Dec 2010
Ort: Luzern, Schweiz
Beiträge: 144
Bedankt: 553
struchli ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von spartan-b292 Beitrag anzeigen
Ich verstehs immer noch nicht. Kannst du vllt mal ein Beispiel geben, mit Auszügen aus den Dateien?
Ja sicher

Also in der Datei Organisation.txt steht zum Beispiel auf Zeile eins die Nummer 4003628505
In der Datei MIT_TMP.tmp kommt irgendwo eine Zeile vorhanden, auf der diese Nummer vorkommt:

12-40036285050002012Firma Coop Mercato Resega via Sonvico 5 007159837 695200Canobbio CH

Das S***** soll nun, die 6000 Nummern der Datei Organisation.txt in der Datei MIT_TMP.tmp finden und die betreffende Zeile in eine neue Datei schreiben.

Ist es jetzt verständlich?

Gruss und Danke struchli
__________________
Win7 x64 + Ubuntu 11.04 AMD Phenom X4 Black Edition 955, 8GB RAM, Asus 5770
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Falls Links down sein sollten bitte PN!
struchli ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 12:44   #6
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.857
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Ja viel Besser!

Zitat:
#!/usr/bin/env bash

for line in `cat organisation.txt`;do
grep .*$line.* mit_tmp.txt >> ausgabe.txt
done
Dateinamen musst du noch entsprechend anpassen.

Ich habe das mal mit dem von dir gegebenen Beispiel nachgebaut. Funktionert bei mir. Das du mit der grep anweisung nicht die Zeilen findest,liegt daran, dass die Zeilen die du suchst die eingelesene Nummer ja mitten in einem String haben. Deshalb mussten da noch ein paar regex ausdrücke hin.

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 13:07   #7
struchli
Erfahrener Newbie
 
Benutzerbild von struchli
 
Registriert seit: Dec 2010
Ort: Luzern, Schweiz
Beiträge: 144
Bedankt: 553
struchli ist noch neu hier! | 0 Respekt Punkte
Standard

Vielen Dank für deine Hilfe spartan-b292 es liegte am System, habe nun halt alle Dateien und das S***** auf eine Linux-Maschine verschoben. Da funktioniert es einwandfrei!!


Zitat:
Zitat von spartan-b292 Beitrag anzeigen
Ja viel Besser!



Dateinamen musst du noch entsprechend anpassen.

Ich habe das mal mit dem von dir gegebenen Beispiel nachgebaut. Funktionert bei mir. Das du mit der grep anweisung nicht die Zeilen findest,liegt daran, dass die Zeilen die du suchst die eingelesene Nummer ja mitten in einem String haben. Deshalb mussten da noch ein paar regex ausdrücke hin.

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Ich weiss nicht, was ich falsch mache. Kann es am System liegen (bei mir AIX)?

Code:
blablabla@blablabla:/tmp:./mit_druck_s*****.sh
4003629533
Mein S*****:

PHP-Code:
#!/bin/bash
#exec 2>&1
#set -vx
#PS4='[nsc: 19]+ '
#export PS4
for line in `cat Organisation.txt`;do
echo 
$line
   grep 
.*$line*. MIT_TMP.tmp >> MIT_ALL_DATE.txt
done 
bei echo $line bekomme ich auch die erste Nummer aber dann macht er nicht mehr weiter (schreibt auch nichts in die Datei MIT_ALL_DATE.txt). Berechtigungen habe ich genug.
__________________
Win7 x64 + Ubuntu 11.04 AMD Phenom X4 Black Edition 955, 8GB RAM, Asus 5770
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Falls Links down sein sollten bitte PN!
struchli ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 13:14   #8
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.857
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Versuchs mal mit grep -E '.*$line.*'

Ich habe kein AIX zur Verfügung deshalb vllt heir nochmal gucken:

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 13:15   #9
struchli
Erfahrener Newbie
 
Benutzerbild von struchli
 
Registriert seit: Dec 2010
Ort: Luzern, Schweiz
Beiträge: 144
Bedankt: 553
struchli ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von spartan-b292 Beitrag anzeigen
Versuchs mal mit grep -E '.*$line.*'

Ich habe kein AIX zur Verfügung deshalb vllt heir nochmal gucken:

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Vielen vielen Dank für deine Hilfe. Es hat tatsächlich am System gelegen.
__________________
Win7 x64 + Ubuntu 11.04 AMD Phenom X4 Black Edition 955, 8GB RAM, Asus 5770
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Falls Links down sein sollten bitte PN!
struchli ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 13:18   #10
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.857
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Sehr schön.

Du könntest noch ausprobieren ob du auch mit fgrep (kennt weniger regex, ist aber schneller) auskommst. Das könnte das S***** beschleunigen da 6000 Einträge doch schon etwas mehr sind.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 25.04.13, 13:33   #11
struchli
Erfahrener Newbie
 
Benutzerbild von struchli
 
Registriert seit: Dec 2010
Ort: Luzern, Schweiz
Beiträge: 144
Bedankt: 553
struchli ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von spartan-b292 Beitrag anzeigen
Sehr schön.

Du könntest noch ausprobieren ob du auch mit fgrep (kennt weniger regex, ist aber schneller) auskommst. Das könnte das S***** beschleunigen da 6000 Einträge doch schon etwas mehr sind.
Ja stimmt mit dem fgrep ist er schneller :-)
Vielen vielen Dank ;-)
Gruss struchli
__________________
Win7 x64 + Ubuntu 11.04 AMD Phenom X4 Black Edition 955, 8GB RAM, Asus 5770
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Falls Links down sein sollten bitte PN!
struchli ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr.


Sitemap

().