2016-10-06 2 views
0

Ich möchte eine Datei brechen, die mehrere Linien hat, die diesen Stil folgen:Anfänger Bash Scripting

e-mail;year/month/date;groups;sharedFolder 

Ein Beispiel Zeile aus der Datei:

[email protected];1912/06/23;visitor;/visitorData 

Grunde möchte ich jede Zeile bis brechen in vier Arrays, auf die später in einer Schleife zugegriffen werden kann, um für jede Zeile einen neuen Benutzer zu erstellen.

  • Ich habe erklärt, die Arrays haben bereits eine Datei gespeichert als Variable ‚Dateiname‘

  • Benutzernamen müssen die ersten drei Buchstaben des Nachnamens und die ersten drei Buchstaben des Vornamens sein.

  • Passwörter müssen das Geburtsdatum des Benutzers als Tag/Monat/Jahr sein.

Bis jetzt ist das, was ich habe. Bin ich auf dem richtigen Weg? Gibt es Orte, wo ich falsch gelaufen bin oder mich verbessern konnte?

#reads file and saves into appropriate arrays 
while read -r line 
do 
    IFS = $';' read -r -a array <<< "$line" 

    mailArray += "$(array[0])" 
    dateArray += "$(array[1])" 
    groupArray += "$(array[2])" 
    folderArray += "$(array[3])" 
done < $filename 


#create usernames from emails 
for i in "$(mailArray[@])" 
do 
    IFS=$'.' read -r -a array <<< "$i" 

    part1 = ${array[0]:0:3} 
    part2 = ${array[1]:0:3} 

    user = $part2 
    user .= $part1 

    userArray += ("$user") 
done 


#create passwords from birthdates 
for i in "$(dateArray[@])" 
do 
    IFS=$'/' read -r -a array <<< "$i" 

    password = $part3 
    password .= $part2 
    password .= $part1 

    passArray += ("$password") 
done 
+1

Gibt es einen Grund für die Verwendung von Arrays und Speichern von Dateien in Dateien? warum nicht einfach eine Zeile so verarbeiten, wie sie gelesen wird? – xvan

+0

Ich denke, diese Frage könnte besser werden, und mehr, Antworten in [Code Review Stack Exchange] (http://codereview.stackexchange.com/). –

Antwort

0

Nicht sicher, ob Arrays hier erforderlich sind, und wenn Sie nur Benutzernamen erstellen möchten, ein Passwort aus den Linien im gewünschten Format, siehe unten:

# Sample Input Data: 

bash$> cat d 
[email protected];1912/06/23;visitor;/visitorData 
[email protected];1966/06/23;metalhead;/metaldata 
[email protected];1900/00/00;idiot;/idiotique 
bash$> 

# Sample Output from script: 

bash$> ./dank.sh "d" 

     After processing the line [[email protected];1912/06/23;visitor;/visitorData], we have the following parameters extracted: 

     Name:   alan 
     Surname:  turing 
     Birthdate:  1912/06/23 
     username:  alatur 
     Password:  1912/06/23 



     After processing the line [[email protected];1966/06/23;metalhead;/metaldata], we have the following parameters extracted: 

     Name:   rob 
     Surname:  zombie 
     Birthdate:  1966/06/23 
     username:  robzom 
     Password:  1966/06/23 



     After processing the line [[email protected];1900/00/00;idiot;/idiotique], we have the following parameters extracted: 

     Name:   donald 
     Surname:  trump 
     Birthdate:  1900/00/00 
     username:  dontru 
     Password:  1900/00/00 

nun das Skript, das tut diese Operation.

# Script. 

bash$> cat dank.sh 
#!/bin/bash 


cat "$1" | while read line 
do 
     name=`echo $line | sed 's/^\(.*\)\..*\@.*$/\1/g'` 
     surname=`echo $line | sed 's/^.*\.\(.*\)\@.*$/\1/g'` 
     bdate=`echo $line | sed 's/^.*;\(.*\);.*;.*$/\1/g'` 

     temp1=`echo $name | sed 's/^\(...\).*$/\1/g'` 
     temp2=`echo $surname | sed 's/^\(...\).*$/\1/g'` 

     uname="${temp1}${temp2}" 

     echo " 
     After processing the line [$line], we have the following parameters extracted: 

     Name:   $name 
     Surname:  $surname 
     Birthdate:  $bdate 
     username:  $uname 
     Password:  $bdate 

     " 
done 
bash$> 

Grundsätzlich, ich bin mit nur paar sed Befehle zu extrahieren, was nützlich ist und erforderlich ist, und sie in Variablen speichern und dann könnte man sie benutzen sowieso wollen sie. Sie können sie in eine Datei umleiten, wenn Sie eine röhrengetrennte Ausgabe wünschen oder ausdrucken.

Lassen Sie mich wissen ..