Textdatei: suche - ergänzen

C

cahlnickel

Jungspund
Hallo zusammen !

habe folgendes Problem:

habe eine komma-getrennte Textdatei:
z.B.: (a,b,c...nur als Beispiel, is klar :brav: )

a,b,c,p
a,b,c,w,/,p

jetzt möchte ich abfragen, ob an 5. Stelle (awk ??) ein / ist, falls nicht (wie in der ersten Zeile) möchte ich diese Zeile so aussehen lassen:

a,b,c,0,/,p

ich möchte also ein "0,/," vor das letzte Element einfügen.
habe schon mit
cat text | tr "," " " | awk ....irgendwas mit $5 ?( rumprobiert...komme aber kein stück weiter -

Vielen Dank schon mal
Grüße
cahl
 
Hi,

ich gehe zwar auch stark davon aus, daß es mit awk hinzubekommen ist (ggf. sogar noch einfacher/eleganter als mit sed), aber bin dabei leider auch nur bei
Code:
awk -F"," '$5 ~ /\//{$4=0; print}' /datei
hängen geblieben und müßt jetzt in Informationen zu awk wühlen um ggf. weiter zu kommen.

Dafür habe ich Dir eine (hoffentlich) passende Lösung mit sed:
Code:
sed 's/\(^[^,]*,[^,]*,[^,]*,\)[^,]*,\/,\(.*$\)/\10,\/,\2/g' /datei

fallout@server:~> cat blubb
a,b,c,p
a,b,c,w,/,p
dfs,dfs,dfs,fsd,a0,fd,0
f,0,a,b,c0,d/,
,,1,2,3,4
a,b,,c,,,,,f
ae,sdt,w,u,/,,,,df
fallout@server:~> sed 's/\(^[^,]*,[^,]*,[^,]*,\)[^,]*,\/,\(.*$\)/\10,\/,\2/g' blubb
a,b,c,p
a,b,c,0,/,p
dfs,dfs,dfs,fsd,a0,fd,0
f,0,a,b,c0,d/,
,,1,2,3,4
a,b,,c,,,,,f
ae,sdt,w,0,/,,,,df

Gruß Daniel

Edit: die asterisks (*) brauchst Du, wenn Du damit rechnen mußt, daß die Felder zwischen den Kommata auch größer als 1 Zeichen sein könnten.
 
Zuletzt bearbeitet:
Hallo cahlnickel

Nur mal so als Ansatz.
- Schauen was an der fünften Stelle steht:
Code:
cut -f5 -d, text
- Die fünfte Stelle durch '0,/,' ersetzen:
Code:
sed 's/\(.,.,.,.,\)\(.\)\(.*\)/\10,\2\3/g' text
Ich hoffe das hilft dir weiter...

Gruss
d22

//edit: Da war ich wohl zuspät... Ich tippe einfach zu langsam ;)
 
Hallo

Man kann auch mit IFS arbeiten.
Code:
# IFS auf Komma setzen alten sichern
OLDI="$IFS";
IFS=$',';
while read F1 F2 F3 F4 F5 REST; 
do
if [ "$F5" = '/' ];
then
F4="0";
fi
echo "$F1,$F2,...$REST";
done <INPUT
#zurücksetzen
IFS="$OLDI";


Nur so als weitere Alternative.

Gruß Wolfgang
 
SUPER !!! :)

vielen, vielen Dank an Euch alle !

ganz grosses Lob an Euch und den Gedanken "hilf den Kleinen" - es gibt mittlerweile viel zu viele Leute, die auf Ihrem Wissen "rumglucken" wie die Hühner, ohne es zu teilen....genug Morallaberei, wollte nur mal meine Begeisterung zum Ausdruck bringen.

Grüße
cahl
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

awk skript: Probleme mit if und else Anweisungen

rsync: Quelle größer als Ziel => "Archiv" aufteilen/splitten

Text ersetzen - (schon wieder - ich weiß)

iptables weiterleitung port vom internen Netzwerk zum internet Port

Zurück
Oben