Как сопоставить число в одном файле с именем в другом файле?

Как сопоставить число в одном файле с именем в другом файле?

Хорошо, надеюсь, это подходящее место, чтобы спросить. У меня есть 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. Но после того, как он посмотрел, он сказал, что все в порядке. Он всегда говорит: «Есть больше, чем один способ содрать шкуру с пресловутого кота».

Спасибо всем за помощь, особенно Летиции.

Связанный контент