x-tes argument in einer zeile löschen

P

ploki

Jungspund
Hallo,

ich habe eine Textdatei die ungefähr so aussehen kann:
WORT, noch_eins, '', -143.4, 44, usw....
WORT2, noch_eins4, '', -14324.4, 414, usw....
WORT3, '', '', -1432.4, 442, usw....

Also die Argumente sind jeweils durch ein Komma getrennt.

Nun möchte ich in der ganzen Datei jeweils das 3. Argument herauslöschen, also >, '',< durch >,< ersetzen.
Ich habe gedacht das müsste mit sed gehen:

Code:
cat datei | sed s/", \'\',"/,/3 > fixed_datei

aber die 3 hinten gibt ja nur das 3 vorkommen an, also falsch.
kennt jemand eine schnelle lösung? :think:


edit: es müsste doch irgendwie damit gehen
Code:
cat datei | grep -v ",\'\'" > fixed_datei
 
Zuletzt bearbeitet:
Hi,

Code:
 sed "s/^\(.*,\)\(.*,\)\(\ '',\)/\1\2/" dummyfile

EDIT:
grep arbeitet Zeilenweise deshalb gehts damit nicht :)

mfg
HeadCrash
 
Danke schonmal für die schnelle Hilfe, bei der Lösung mit perl versteh ich nicht, wieso folgendes nicht geht:

Code:
cat datei | perl -n -e 'split;print "@_[${behalten}..@_]\n"' > fixed_datei

wobei "behalten" ein string ist der so aussieht:
1,2,4,5,7,8,9,14,16,34... usw
also dort sollen die einträge stehen die behalten werden sollen.
Aber irgendwie macht er garnicht wenn ich die Zeile ausführ
 
Code:
 cut --complement -d ',' -f 3 datei.text

das schmeis ja nur das dritte argument raus, aber ich muss mehrere rausschmeißen, also ich will z.B. die "Spalten" 1 2 4 5 und 8 beibehalten, die anderen sollen also gelöscht werden. Welche Argumente beibehalten werden sollen steht in der Variablen $behalten

Nun hat das mit dem perl toll geklappt, wenn man das hart kodiert eingibt, also z.B. so:

Code:
cat datei | perl -n -e 'split;print "@_[1,2,4,5,8..@_]\n"' > fixed_datei

aber wenn ich die Varibale übergeb, dann macht der Code garnichts, obwohl genau das gleiche in der Variablen steht: behalten="1,2,4,5,8"

Code:
cat datei | perl -n -e 'split;print "@_[${behalten}..@_]\n"' > fixed_datei

kann das vielleicht sein, dass die Variable falsch übergeben wird?
 
In o.a. Perl-Statement wird wohl $behalten wegen der single quotes nicht ausgewertet. Das kannst du umgehen, indem du double quotes verwendest, z.B. etwa so (ungetestet):
Code:
perl -ne "split; print qq{@_[${behalten}..@_]\n}" datei >fixed_datei
Viel einfacher scheint mir allerdings die Variante mit cut:
Code:
cut -d, -f $behalten datei >fixed_datei
Gruss
 

Ähnliche Themen

Zeilen löschen und ersetzen mit sed

Zurück
Oben