¿Cómo hacer coincidir un número en un archivo con un nombre en otro archivo?

¿Cómo hacer coincidir un número en un archivo con un nombre en otro archivo?

Bien, espero que este sea el lugar adecuado para preguntar. Tengo 2 archivos.

El primer archivo tiene 4 campos: número de CRN de clase, número de identificación del instructor, número de sección de clase y número de estudiantes.

Ejemplo:

0002  T00005  006  15
0004  T00004  012  26
.
.
etc

El segundo archivo tiene 6 campos (lo mejor que puedo decir): número de identificación del instructor, nombre, apellido, edificio, código de área, número de teléfono.

(no estoy seguro si el nombre/apellido es 1 o dos campos...)

Ejemplo:

T00001  Larry Lastname  Corley  555  555-5555
T00002  Ron  Lastname  Coreley  555  111-1111
.
.
etc

La pregunta que se supone que debo responder es: ¿cuántas secciones enseñó cada instructor en un semestre determinado? La solución debe adoptar la forma de:

# of sections | Instructor ID # | FirstName | LastName  

(Solo uso '|' para demostración; la solución en realidad solo usa espacios)

Hasta ahora he hecho esto:

$ cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c

( sem092es el primer archivo que mencioné)

Y la salida fueentoncescerca de lo que necesito. Del código anterior obtuve:

Num. of Sections Taught |  Instructor ID #

De alguna manera, a través de tuberías, tengo que hacer coincidir el número de identificación con los nombres en el otro archivo. Tengo un sentimiento muy fuerte que voy a necesitar usar grep. No busco a nadie que "me tome de la mano". Esto me parece extremadamente interesante, pero creo que me he perdido algo en el camino y necesito un empujón o dos.

Respuesta1

Guarde el resultado de su comando:

 cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > firstPart.txt

Guarde esta línea en el archivo 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

Este script asume que la firtsPart.txtlínea se ve así:

5 T00005

y ese instructorListes el nombre del archivo con 6 campos.

Finalmente intenta:

bash searchInstructorName.sh firstPart.txt

debería funcionar.


Esta es la versión con un solo script:

 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

Guarde estas líneas searchInstructorInfo.shy ejecute:

 bash searchInstructorInfo.sh sections/sem092 instructorList

Respuesta2

Gracias por tus detalladas respuestas Letizia. Utilicé fragmentos de su código y parte de su código, a su vez, me dio más ideas. Sólo para no dejar esta publicación colgando: mi código final (espantoso) terminó así:

 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

Sé que este código es mortificante. Hoy se lo mostré a mi profesor y me dijo: "Hmm... Déjame ver. ¿Qué has hecho aquí?" jajaja. Pero después de verlo, dijo que estaba bien. Siempre dice: "Hay más de una manera de despellejar al gato proverbial".

Gracias por la ayuda a todos, concretamente a Letizia.

información relacionada