Stringsuche in Datei

H

hexe

Grünschnabel
Hallo zusammen,

ich hoffe ihr könnt mir helfen. Bin Anfängerin im Scripten - wäre also nett, wenn ihr versucht es möglichst einfach zu erklären.

Folgendes Problem:
Ich habe ein Variable - diese enthält immer 6 Ziffern.
In einer Datei stehen in zwei Spalten - 6 Ziffern und 5 Ziffern
111111 22222
222222 33333
333333 44444

Nun soll in der Datei nach der Variablen v gesucht werden. Wenn die Variable v z. B. 222222 enthält, dann soll Spalte 2 (33333) in die Variable z ausgegeben werden.

Komme einfach nicht dahinter... :hilfe2:
 
Code:
#var.txt
111111 22222
222222 33333
333333 44444

Die letzten Zeichen in der Trefferzeile, die keine Whitespaces sind:
Code:
#!/bin/sh
# findZ.sh
Z=`fgrep $1 $2 | grep -oEe "\w+$"`
echo $Z

Aufruf:
Code:
./findZ.sh 333333 var.txt
 
Zuletzt bearbeitet:
Hört sich nach einem Job für awk an:
Code:
echo -e "111 22\n333 55"|awk '{if(/333/) {print $2}}'
In Worten: wenn die Regex (hier allerdings ein Stringmatch) 333 in der Zeile match gebe Spalte zwei (in dem Fall 55) auf dem Bildschirm aus. (So in etwa..)
Dann noch mit Variablen:
Code:
v="333"
z=$(echo -e "111 22\n333 55"|awk '{if(/'$v'/) {print $2}}')
 
Hallo
Von was reden wir hier?


Hallo zusammen,

ich hoffe ihr könnt mir helfen. Bin Anfängerin im Scripten - wäre also nett, wenn ihr versucht es möglichst einfach zu erklären.

Folgendes Problem:
Ich habe ein Variable - diese enthält immer 6 Ziffern.
In einer Datei stehen in zwei Spalten - 6 Ziffern und 5 Ziffern
111111 22222
222222 33333
333333 44444

Nun soll in der Datei nach der Variablen v gesucht werden. Wenn die Variable v z. B. 222222 enthält, dann soll Spalte 2 (33333) in die Variable z ausgegeben werden.

Komme einfach nicht dahinter... :hilfe2:

Schnellschuß ungetestet für die bash (spekulativ, da du weder OS noch Shell nennst), ohne awk und zusätzliche Prozesse:
Code:
v="222222";
NEW="33333";
while read INPUT1 INPUT2;do
      if [ "$INPUT1"="$v" ];
              then z="$NEW";
      fi;
done <inputfile
echo "$z"

Gruß Wolfgang
 
Noch eine kleine Hilfestellung

Hallo zusammen,
ich habe gleich die erste Lösung getestet - sie funktioniert bei mir aber nicht ganz...

Die letzten Zeichen in der Trefferzeile, die keine Whitespaces sind:
Code:
#!/bin/sh
# findZ.sh
Z=`fgrep $1 $2 | grep -oEe "\w+$"`
echo $Z

Bei "grep -oEe bekomme ich folgende Fehlermeldung:
grep: Ungültige Option -- o
grep: Ungültige Option -- E
grep: Ungültige Option -- e
Syntax: grep -hblcnsviw pattern file . . .


Könnt ihr das erklären?

Ich habe inzwischen dann eine ähnliche Lösung gefunden:
$S="222222"
$V="Datei"
R=`fgrep $S $V`
echo $R --> 222222 33333
R=${R:7:5}
echo $R --> 33333

Wie kann ich hier den Pipe-Mechanismus verwenden?

Shell ist übrigens bash und OS ist Solaris.

Danke!
 
Bei "grep -oEe bekomme ich folgende Fehlermeldung:
grep: Ungültige Option -- o
grep: Ungültige Option -- E
grep: Ungültige Option -- e
Syntax: grep -hblcnsviw pattern file . . .


Könnt ihr das erklären?

Du verwendest ein "anderes" grep.

Das Solaris-Grep wird sich im Aufbau der Kommandozeilenparameter vom GNU-Grep unterscheiden. Genau wie das BSD-Grep sich wiederrum anders "verhält".
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Script zur Korrektur einer E-Book Datei

Text mit mehreren Zeilen und Sonderzeichen ersetzten

Zurück
Oben