18.8.4. Пропуск строк в файлах
18.8.4. Пропуск строк в файлах
Рассмотрим файл, содержащий перечень сотрудников. Этот файл уже использовался ранее, но теперь он будет включать некоторую заголовочную информацию.
$ pg names2.txt
LISTING OF PERSONNEL FILE
TAKEN AS AT 06/1999
Louise Conrad:Accounts:ACC8987
Peter James:Payroll:PR489
Fred Terms:Customer:CUS012
Janes Lenod:Accounts:ACC887
Frank Pavely:Payroll:PR4S9
При просмотре этого файла нетрудно заметить, что его первые две строки не содержат сведений о сотрудниках. Поэтому эти строки желательно исключить.
Также не следует принимать во внимание сведения о сотруднике с именем Peter
james Этот человек уволился из компании, но запись о нем осталась в файле.
Давайте все же сохраним заголовочную информацию, выполнив простой подсчет считываемых строк При этом обработка файла будет выполняться в том случае, когда номер строки будет больше двух Если строка содержит имя Peter James, она будет исключена из процесса обработки.
Вот сценарий, выполняющий описанные задачи
$ pg whilecontinue
#!/bin/sh
# whilecontinue
SAVFDIFS=$IFS
IFS=:
INPUT_FlLE=names2.txt
NAME_HOLD="Peter James"
LINE_NO=0
if [ -s $INPUT_FILE ]; then
while read NAME DEPT ID
do
LINE_NO=`expr $LINE_NO + 1`
if [ "$LINE_NO" — le 2 ]; then
# допуск, если номер строки меньше 2 continue
if [ "$NAME"="$NAME_HOLD" ], then
# пропуск, если переменной NAME_HOLD присвоено имя Peter James
continue
else
echo " Now processing $NAME $DEPT $ID"
# обработка файла
fi
done < $INPUT_FILE
IFS=$SAVEDIFS
else
echo "`basename $0` : sorry file not found or there is no data in the file" >&2
exit 1
При выполнении сценария получим следующие результаты.
$ whilecontinue
Luise Conrad Accounts ACC8987
Fred Terns Customer CJS012
James Lenod Accounts ACC887
Frank Pavely Payroll PR389