
Хорошо, надеюсь, это подходящее место, чтобы спросить. У меня есть 2 файла.
Первый файл содержит 4 поля: номер CRN класса, номер идентификатора преподавателя, номер секции класса, количество студентов.
Пример:
0002 T00005 006 15
0004 T00004 012 26
.
.
etc
Во втором файле 6 полей (насколько я могу судить): идентификационный номер инструктора, имя, фамилия, здание, код города, номер телефона.
(не уверен, имя/фамилия — это одно или два поля...)
Пример:
T00001 Larry Lastname Corley 555 555-5555
T00002 Ron Lastname Coreley 555 111-1111
.
.
etc
Вопрос, на который я должен ответить: сколько разделов преподавал каждый преподаватель в данном семестре? Решение должно быть в форме:
# of sections | Instructor ID # | FirstName | LastName
(Я использую «|» только для демонстрации — в решении на самом деле используются только пробелы)
На данный момент я сделал следующее:
$ cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c
( sem092
это первый файл, который я упомянул)
И на выходе получилосьтакблизко к тому, что мне нужно. Из кода выше я получил:
Num. of Sections Taught | Instructor ID #
Каким-то образом, через каналы, мне нужно сопоставить ID # с именами в другом файле. У меня очень сильное чувство, что мне нужно будет использовать grep
. Я не ищу никого, кто «поведет меня за руку». Я нахожу это чрезвычайно интересным, но, кажется, я что-то упустил по пути и мне нужен один-два толчка.
решение1
Сохраните вывод вашей команды:
cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > firstPart.txt
Сохраните эту строку в файле searchInstructorName.sh
:
cat $1 | while read line; do
instructorID=`echo $line | awk '{print $2}'`
name=`grep $instructorID instructorList | awk '{print $2 " " $4}'`
echo "$line $name"
done
Этот скрипт предполагает, что firtsPart.txt
строка выглядит так:
5 T00005
и это instructorList
имя файла с 6 полями.
Наконец, попробуйте:
bash searchInstructorName.sh firstPart.txt
это должно работать.
Это версия с одним скриптом:
cat $1 | sort -k 2 | awk '{ print $2 }' | uniq -c | while read line; do
instructorID=`echo $line | awk '{print $2}'`
name=`grep $instructorID $2 | awk '{print $2 " " $4}'`
echo "$line $name"
done
Сохраните эти строки searchInstructorInfo.sh
и запустите:
bash searchInstructorInfo.sh sections/sem092 instructorList
решение2
Спасибо за подробные ответы, Летиция. Я использовала кусочки вашего кода, и часть вашего кода, в свою очередь, дала мне больше идей. Просто чтобы не оставлять этот пост в подвешенном состоянии: мой окончательный (ужасный) код получился таким:
cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > no3
paste instructors | awk '{ print $2 " " $3 }' > no3n
#guess I could have just used cat above
paste no3 no3n
Я знаю, что этот код унизителен — я показал его своему профессору сегодня, и он сказал: «Хм... Дай-ка я посмотрю. Что ты тут натворил?» lol. Но после того, как он посмотрел, он сказал, что все в порядке. Он всегда говорит: «Есть больше, чем один способ содрать шкуру с пресловутого кота».
Спасибо всем за помощь, особенно Летиции.