CSV einlese

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von flugopa, 25.01.2007.

  1. #1 flugopa, 25.01.2007
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo,

    ich brauche mal wieder ein Anstoß in die richtige Richtung.
    Was will ich?

    Eine CSV-Datei (Beispiel: Vorname;Nachnahme;Geb;u.s.w.)
    mit cut -d ; -f1,2,3 komme ich nicht richtig weiter.

    Vorname soll dann in $1 stehen
    Nachname soll dann in $2 stehen
    u.s.w.

    Ich brauche die $1, $2, $3.
    Wer hat eine Beispielzeile für mich?
     
  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. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo flugopa,

    so vielleicht:

    Code:
    #!/bin/bash
    while read ZL
    do
      vna=$(echo $ZL | cut -d";" -f1)
      nna=$(echo $ZL | cut -d";" -f2)
      geb=$(echo $ZL | cut -d";" -f3)
      printf "TEST: Vorname=%s - Nachname=%s - Gebtag: %s\n" $vna $nna $geb
    done < ./flugopa.csv
    
    Gruss zst
     
  4. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Welche Shell wird verwendet? Im Falle der bash kann man den Internal Field Separator benutzen:

    Code:
    $ csv="aaa;bbb;ccc"
    $ IFS=';'; set $csv; echo "\$1=$1 \$2=$2 \$3=$3"; unset IFS
    $1=aaa $2=bbb $3=ccc
    
    Gruss, Xanti
     
  5. #4 Wolfgang, 25.01.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Es gibt auch die Möglichkeit mit der Variable IFS zu spielen, das spart die ganzen cut - Aufrufe:
    Code:
    IFS=$';';
    echo 'foo bar;foobar;13121989; weitere Teile'|while read a b c dummy;
    do 
    echo "Das steht in 3: $c";
    echo "Das steht in 1: $a";
    echo "Das steht in 2: $b"
    done
    

    Gruß Wolfgang
     
  6. #5 flugopa, 28.01.2007
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo,

    #>>> FRAGE: Wie kann ich das Smbpasswd-Passwort "mitgeben" ?


    nach längerer Zeit habe ich mir nun das Skript gebastelt.
    Es gibt bestimmt bessere Methoden um das gleiche Ergebnis zu erreichen, aber jeder Anfang ist Mühevoll.

    ##############################################
    #!/bin/bash

    # Einlesen einer csv-Datei mit der Struktur:
    # Vorname;Nachname;Geburtstag;Wohnort

    declare -i a1=`date +%Y+1`
    b1=`date +%m-%d`
    ABLAUFDATUM=$a1-$b1

    if [ ! `grep GRP_SAMBA /etc/group` ]; then
    groupadd GRP_SAMBA
    fi

    DATUM=`date +%d.%m.%Y`

    while read ZL
    do
    Vorname=$(echo $ZL | cut -d";" -f1)
    Nachname=$(echo $ZL | cut -d";" -f2)
    LOGIN_NAME=$Vorname"."$Nachname
    if [ ! `cut -d: -f1 /etc/passwd | grep $LOGIN_NAME` ]; then
    echo -e "Erstelle Account für: " $LOGIN_NAME

    GEBURTSTAG=$(echo $ZL | cut -d";" -f3)
    WOHNORT="GRP_"$(echo $ZL | cut -d";" -f4)

    if [ ! `grep $WOHNORT /etc/group` ]; then
    groupadd $WOHNORT
    fi

    PASSWORT=$LOGIN_NAME"_"$GEBURTSTAG

    useradd -c "Konto durch Skript am $DATUM angelegt." -d /home/users/$LOGIN_NAME -e $ABLAUFDATUM -f 30 -g $WOHNORT -G GRP_SAMBA -m -n -p $PASSWORT $LOGIN_NAME

    #>>> FRAGE: Wie kann ich das Passwort "mitgeben" ?
    smbpasswd -a $LOGIN_NAME
    #>>> Hier will ein Passwort.


    fi

    sleep 1
    done < /home/userliste
     
  7. #6 Schlaubi_fi.de, 28.01.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Moin,

    expect ist was Du suchst :D
     
  8. #7 flugopa, 28.01.2007
    Zuletzt bearbeitet: 28.01.2007
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München

    Vielen Dank für die richtige Info.
    Flugopa


    Zu früh gefreut: TESTDATEI
    #!/bin/bash
    while read ZL
    do
    Vorname=$(echo $ZL | cut -d";" -f1)
    Nachname=$(echo $ZL | cut -d";" -f2)
    LOGIN_NAME=$Vorname"."$Nachname
    PASSWORT=$(echo $ZL | cut -d";" -f3)
    useradd -p $PASSWORT $LOGIN_NAME

    smbpasswd -a $LOGIN_NAME
    except New SMB password:
    send $PASSWORT
    except Retype new SMB password:
    send $PASSWORT
    smbpasswd -e $LOGIN_NAME

    done < /home/userliste

    echo -e "\n\n"

    cat /etc/samba/smbpasswd

    read pause


    while read ZL
    do
    Vorname=$(echo $ZL | cut -d";" -f1)
    Nachname=$(echo $ZL | cut -d";" -f2)
    LOGIN_NAME=$Vorname"."$Nachname
    smbpasswd -x $LOGIN_NAME
    userdel $LOGIN_NAME
    done < /home/userliste


    Es geht mir um die autom. Übergabe von Passwörtern in Samba.
    Wer hat noch Ideen?
     
  9. #8 Schlaubi_fi.de, 28.01.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Huhu...normal solltes Du eine Fehlermeldung bekommen - bitte posten,
    denn mit except kanns nicht funktionieren *g es heißt nämlich expect!! :D
     
  10. #9 flugopa, 29.01.2007
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Zu früh gefreut

    Ich hatte mich zu früh gefreut.
    Kann einer das Script richtig stellen?


    ./c1.sh: line 12: except!!: command not found
    ./c1.sh: line 13: send: command not found
    ./c1.sh: line 14: except!!: command not found
    ./c1.sh: line 15: send: command not found


    #!/bin/sh

    while read ZL
    do
    Vorname=$(echo $ZL | cut -d";" -f1)
    Nachname=$(echo $ZL | cut -d";" -f2)
    LOGIN_NAME=$Vorname"."$Nachname
    PASSWORT=$(echo $ZL | cut -d";" -f3)
    useradd -p $PASSWORT $LOGIN_NAME

    smbpasswd -a $LOGIN_NAME
    except!! "New SMB password:"
    send $PASSWORT
    except!! "Retype new SMB password:"
    send $PASSWORT
    smbpasswd -e $LOGIN_NAME

    done < /home/userliste

    echo -e "\n\n"

    cat /etc/samba/smbpasswd

    read pause


    while read ZL
    do
    Vorname=$(echo $ZL | cut -d";" -f1)
    Nachname=$(echo $ZL | cut -d";" -f2)
    LOGIN_NAME=$Vorname"."$Nachname
    smbpasswd -x $LOGIN_NAME
    userdel $LOGIN_NAME
    rm -rf /home/vor*
    done < /home/userliste
     
  11. #10 Schlaubi_fi.de, 29.01.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Hallo??!

    Ließ mal bitte was da da steht!

    Also probiers richtig!!


    smbpasswd -a $LOGIN_NAME
    expect "New SMB password:"
    send $PASSWORT
    expect "Retype new SMB password:"
    send $PASSWORT
    smbpasswd -e $LOGIN_NAME
     
  12. #11 supersucker, 29.01.2007
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ey,

    du liest auch schon selber die Fehlermeldungen bevor du hier postest oder?

    WTF ist hieran unklar?
     
  13. #12 flugopa, 29.01.2007
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Bash-Master gesucht

    Hallo,

    leider ist es als Anfänger sehr schwer den passenden Syntax zu finden.
    Worum geht es?

    Neue Usernamen mit Passwörtern per Skript + Liste aufzunehmen.
    (CSV-Liste)

    Wer hat ein Codeschnipsel übrig, oder kennt anderen Foren von Bash-Mastern?
     
  14. #13 Schlaubi_fi.de, 29.01.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    *kopfschüttl* :( :think:
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 flugopa, 30.01.2007
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    SAMBA-Passwortübergabe gelöst

    Hallo,

    manchmal ist man ganz schön blind, so wie ich.

    Wer es mit expect machen will..., der muß wahrscheinlich die Installation yum install expect "ankurbeln", oder man macht es so:

    #!/bin/sh
    LOGIN_NAME="HUBER1"
    PASSWORT="HUBER1"
    useradd -p $PASSWORT $LOGIN_NAME
    printf $PASSWORT"\n"$PASSWORT"\n" | smbpasswd -a -s $LOGIN_NAME
    smbpasswd -e $LOGIN_NAME

    Und was ist für die Experten so schwer daran? Kopfschüttl :( :think:
     
  17. #15 supersucker, 30.01.2007
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Wenn du unfähig bist dein Problem zu beschreiben ist das nicht unser Problem.

    Lies dir nochmal den Thread durch und du weißt warum.
     
Thema:

CSV einlese

Die Seite wird geladen...

CSV einlese - Ähnliche Themen

  1. SED: Zu bearbeitende Dateien aus Textfile einlesen

    SED: Zu bearbeitende Dateien aus Textfile einlesen: Tag zusammen, entweder ich suche nach den falschen Stichworten, oder ich mache was falsch. Mein Problem : Mit dem Befehl grep -Rsl...
  2. Datei einlesen, veränder und ausgeben mit AWK

    Datei einlesen, veränder und ausgeben mit AWK: Hallo, Ich will eine Datei, in der eine Literaturliste steht mit Hilfe von AWK Zeile für Zeile einlesen, dann die Datei so verändern, dass zB....
  3. Schleife zum einlesen vieler Dateien funktioniert nicht

    Schleife zum einlesen vieler Dateien funktioniert nicht: [gelöst] Schleife zum einlesen vieler Dateien funktioniert nicht Hallo Leute, ich habe ein kleines Problem. Mein Script zerlegt eine große...
  4. Kommandozeilenparameter einlesen funktioniert nicht

    Kommandozeilenparameter einlesen funktioniert nicht: Hallo, ich habe da noch so ein Problem mit dem Einlesen der Kommandozeilenparameter meines Scriptes: Es müssen mind. 2 Paramter angegeben...
  5. ^E einlesen und übergeben

    ^E einlesen und übergeben: Ich habe verschieden Rechner die sich am Server registrieren sollen. Dazu benutze ich PuTTY was ja auf dem ASCII-Wert 5 eine Eingabe zurückliegt....