2016-02-12 2 views
2

У меня есть задание, где я читала в файл, вот мой кодShell скрипт помощь для чтения в файле

#Reads in file 
while read line; do 
echo `wc -l` "is the number of students in the input file." 
echo `grep '^[^4]'| wc -l` 

done <students.txt 

По сути я пытаюсь отобразить количество студента идентификаторов, которые не начинаются с 4. Я надеялся, что grep '^ [^ 4]' | wc -l выполнил бы трюк, но он просто вернет 0. Ниже приведен текст, который читается. Любые предложения о том, как это сделать (это вводный UNIX-класс, поэтому я не могу использовать что-либо сверху сверху ха-ха).

256-56-8411 Bob  3.61 junior  cs 
471-44-7458 Tim  3.45 senior  ce 
326-56-4286 Rajesh 2.97 freshman te 
548-66-1124 Eric  2.88 sophomore ee 
447-21-3599 John  2.51 junior  cs 
911-41-1256 Rebecca 3.92 senior  cs 
854-22-6372 Robin 2.45 freshman te 
+0

Имеет ли непосредственная команда 'grep '^ [^ 4]'' в вашем файле ввода хороший результат? – usr2564301

+0

Нет, ничего не отображается. знак равно Это также скрипт оболочки, поэтому он не должен показывать ничего из этой команды? –

+0

Не используйте цикл while. Укажите имя файла для каждой команды, например. '' echo 'grep '^ [^ 4]' students.txt | wc -l' '' –

ответ

4

Обязательно использовать read? Потому что вам это не нужно. Что вы думаете о простой grep или wc -l?

FILE="students.txt" 

echo "$(cat "$FILE" | wc -l) is the number of students in the input file" 
echo "$(grep -c '^[^4]' "$FILE") is the number of student ID's that do not start with a 4" 
+0

Это сработало, да, это не требование использовать чтение. Я прочитаю, что именно вы сделали, так как я немного смущен тем, как это работает ха-ха! Спасибо, мой человек! –

+0

@that other guy: Просто из любопытства, почему вы предпочитаете двойные кавычки, даже если они не нужны? Например, при объявлении переменной $ FILE. – fanton

+1

@wadeaston: Рад, что это помогло. Конфликт '$ (command)' аналогичен тому, что делают обратные операции: сначала оцените выражение внутри, прежде чем оценивать целое, содержащее выражение. 'grep -c' - это просто ярлык для' grep | wc -l'. Всякий раз, когда вы сомневаетесь в использовании какого-либо параметра, используйте 'man command'. – fanton

Смежные вопросы