2011-11-30 27 views
8

próbowałem wszystkiego przez ostatnie 2 godziny, aby to działało, ale moje doświadczenie w powłoce i programowaniu jest ograniczone.Podczas pętli, jak czytać z drugiego wiersza pliku tekstowego

mam pętlę

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

statements here... 

done < $file 

Teraz operacja wewnątrz oświadczenie jest do odczytu z pliku tekstowego, który ma 5 pól, jak można zobaczyć, a następnie wykorzystać je do tworzenia kont w systemie Linux za pomocą bash

useradd $var1 -p var2 -g var3 i tak dalej

Chcę, aby skrypt zaczął czytać tylko z drugiej linii, nie mogę go uruchomić. coś jak podczas ifs =, odczyt (z drugiej linii) var 1 var 2 var3 itd.

powodem jest to, że plik jest eksportowaną bazą danych z programu Excel do pliku csv, więc pierwszy wiersz zawierałby tytuły takie jak imię uczestniczących etc etc i nie jest konieczna

Twoja pomoc jest mile widziana

Dodatek:

Przed użytkownicy są tworzone, dodałem if i jeśli użytkownicy spełniają warunek następnie zostaną one utworzone.

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

wyjście echo jest coś takiego jak

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

nawet jeśli dodam sed 1d | podczas gdy IFS = itd. itd. wydaje się, że wciąż czyta pierwszą linię, dlatego otrzymuję pierwsze wyjście, jak "pełna nazwa nie jest w pełni zarejestrowana"

Odpowiedz

12

Użyj sed, aby "usunąć" pierwszą linię z przekazanego wejścia do pętli

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

rozwiązanie oparte awk:

awk 'NR >= 2 { print }' < "$file" 
Powiązane problemy