Как обновить файл с информацией со стандартного ввода (клавиатуры) с помощью сценария оболочки? - PullRequest
0 голосов
/ 13 июня 2011

В основном я должен сделать следующее:

У меня есть файл, содержащий имена учеников и их неполные оценки:

(firstname lastname grade)

И что я должен сделать, это обновить этот файл с их оценками экзамена и их окончательными оценками:

(partial+exam)/2

Оценка экзамена вводится с клавиатуры. Поэтому я должен повторить имя учащегося и прочитать его оценку за экзамен с клавиатуры и обновить его строку в файле, а затем перейти к следующему, и когда я все закончу, отсортируйте его после столбца окончательной оценки. *

Я застрял при чтении экзаменационной оценки с клавиатуры. Я пытался использовать какую-то форму awk и sed, но не могу заставить ее работать (не могу получить информацию с клавиатуры), и я даже не уверен, так ли это должно быть.

Пожалуйста, помогите.

Ты заранее, Бандо

редактирование: (Ты для редактирования, я немного новичок в этом)

вход выглядит так:

Tom Green 7
Jenny Patricks 6
Andrew Gibbs 3
Collin Matthews 10

он должен запускаться из скрипта. во время бега он должен поставить на стандартный вывод имя и фамилию учащегося и узнать его оценку. после того, как он будет отредактирован, файл будет выглядеть так:

Tom Green 7 9 8

и затем идет к следующему ученику.

Ответы [ 3 ]

1 голос
/ 13 июня 2011

Этот скрипт делает нечто похожее на то, что вы хотите:

#!/bin/bash

# $1 input file
# $2 output file (or equal to $1 if ommitted)

if [ -z "$2" ]; then
    OUTFILE=$1
else
    OUTFILE=$2
fi

cat $1 | while read -u 0 FIRST LAST PART ; do
    echo "firstname: '$FIRST'"
    echo "lastname: '$LAST'"
    echo "grade: '$PART'"
    read -p "Exam grade: " -u 1 EXAM

    #Edit
    # was   let FINAL=(PART+EXAM)/2
    # should be:
    FINAL=$(calc \($PART+$EXAM\)/2)

    echo "$FIRST $LAST $PART $EXAM $FINAL" >> tmp
    echo "final grade: '$FINAL'"
    echo -e "-----------\n"
done

mv tmp $OUTFILE

Но арифметика оболочки только целочисленная.Для деления у вас есть два оператора: / (целочисленное деление) и % (напоминание).Я думаю, что вы должны рассмотреть другой язык для этой задачи, как python или perl.


Редактировать: Возможно, вы захотите использовать команду calc из apcalc.Смотрите исправленный скрипт выше.Вам придется настроить параметры команды calc, чтобы она не приняла STDIN.Извините, я должен оставить вас с этим - у меня сейчас нет времени.

1 голос
/ 13 июня 2011

cat > будет читать с клавиатуры куда угодно - нажмите Ctrl + D, чтобы закрыть ввод.

0 голосов
/ 13 июня 2011

Вы можете использовать команду read, чтобы получить пользовательский ввод от пользователя в сценарии оболочки. Например read data echo $data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...