2011-11-30 9 views
8

ho provato tutto per le ultime 2 ore per farlo funzionare, ma la mia esperienza in shell e programmazione è limitata.Durante il ciclo, come leggere dalla seconda riga del file di testo

Ho un ciclo

while IFS="," read var1 var2 var3 var4 var5 ; do 

statements here... 

done < $file 

Ora l'operazione all'interno affermazione è di leggere da un file di testo che dispone di 5 campi, come si può vedere e poi usarli per creare gli account in Linux utilizzando bash

useradd $var1 -p var2 -g var3 e così via

Voglio far sì che lo script inizi a leggere solo dalla seconda riga, non riesco a farlo funzionare. qualcosa come while ifs =, read (dalla seconda riga) var 1 var 2 var3 ecc.

la ragione di ciò è che il file è un database esportato da excel a csv quindi la prima riga conterrà titoli come nome dob arruolati ecc ecc e non è necessario

vostro aiuto è apprezzato

aggiunta:

Prima vengono creati gli utenti, ho aggiunto un'istruzione if e se gli utenti si incontrano una condizione allora saranno creati.

if [ "$var5" == "fullyenrolled" ]; then 
continue with account creation... 
echo "$var1 successfuly created" 
else 
echo "Sorry user $var1 is not fully enrolled" 
fi 

l'uscita dell'eco è qualcosa di simile

Full name is not fully enrolled 
user1 successfuly created 
user2 successfuly created 

anche se aggiungo 1d sed | mentre IFS = ecc. ecc. sembra che stia ancora leggendo la prima riga per questo motivo sto ottenendo il primo output come "nome completo non completamente registrato"

risposta

12

Usa sed per "cancellare" la prima riga dall'ingresso passato al loop

sed 1d $file | while ... 
do 
     your statements here 
done 
0

Una soluzione con awk:

awk 'NR >= 2 { print }' < "$file" 
Problemi correlati