
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
( sem092
es 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.txt
línea se ve así:
5 T00005
y ese instructorList
es 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.sh
y 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.