x-tes argument in einer zeile löschen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von ploki, 13.08.2009.

  1. #1 ploki, 13.08.2009
    Zuletzt bearbeitet: 13.08.2009
    ploki

    ploki Jungspund

    Dabei seit:
    31.03.2009
    Beiträge:
    16
    Zustimmungen:
    0
    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 
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 HeadCrash, 13.08.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Hi,

    Code:
     sed "s/^\(.*,\)\(.*,\)\(\ '',\)/\1\2/" dummyfile
    
    EDIT:
    grep arbeitet Zeilenweise deshalb gehts damit nicht :)

    mfg
    HeadCrash
     
  4. Rvg

    Rvg Doppel-As

    Dabei seit:
    11.07.2004
    Beiträge:
    141
    Zustimmungen:
    0
    Code:
    perl -n -e 'split;print "@_[0,1,3..@_]\n"'
     
  5. ploki

    ploki Jungspund

    Dabei seit:
    31.03.2009
    Beiträge:
    16
    Zustimmungen:
    0
    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
     
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Code:
     cut --complement -d ',' -f 3 datei.text
    
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. ploki

    ploki Jungspund

    Dabei seit:
    31.03.2009
    Beiträge:
    16
    Zustimmungen:
    0
    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?
     
  9. #7 floyd62, 17.08.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    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
     
Thema:

x-tes argument in einer zeile löschen

Die Seite wird geladen...

x-tes argument in einer zeile löschen - Ähnliche Themen

  1. Windows XP im Unix-Test

    Windows XP im Unix-Test: http://www.linux-user.de/ausgabe/2002/09/085-xp-test/index.html also ich finds lustig.... besonders das hier... ##########################...
  2. usernamen als argument übergeben

    usernamen als argument übergeben: Hi ich bin anfänger auf dem gebiet und möchte ein einfaches backup script schreiben. #!/bin/bash #Bei Ausführung des Scripts werden alle Datein...
  3. Metazeichen auf mehrere Argumente anweden

    Metazeichen auf mehrere Argumente anweden: Hey ! Ich habe noch eine Frage ;) Und zwar geht es um den Formalismus. Ich möchte mit dem Stream-Editor etwas ersetzen. Nun möchte ich aber...
  4. Shell Argument

    Shell Argument: Hi, ich habe eine frage zu den shell argumenten. Ich will ein bestimmtes Argument auslesen. Das Problem, das Argument ist in einer Variable....
  5. ./test: line 2: [: too many arguments

    ./test: line 2: [: too many arguments: Kann mir jemand sagen warum er hier meckert? MESSAGE=$(tail -n1 *.log) if [ $MESSAGE = "Export terminated successfully without warnings." ];...