Wie kann man eine Nummer in einer Datei einem Namen in einer anderen Datei zuordnen?

Wie kann man eine Nummer in einer Datei einem Namen in einer anderen Datei zuordnen?

Okay, ich hoffe, das ist der richtige Ort für deine Frage. Ich habe 2 Dateien.

Die erste Datei hat 4 Felder: Klassen-CRN-Nr., Dozenten-ID-Nr., Klassenabschnitts-Nr., Anzahl der Studenten.

Beispiel:

0002  T00005  006  15
0004  T00004  012  26
.
.
etc

Die zweite Datei hat 6 Felder (soweit ich das beurteilen kann): Dozenten-ID-Nr., Vorname, Nachname, Gebäude, Vorwahl, Telefonnummer.

(nicht sicher, ob Vor-/Nachname ein oder zwei Felder sind …)

Beispiel:

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

Die Frage, die ich beantworten soll, lautet: Wie viele Kurse hat jeder Dozent in einem bestimmten Semester unterrichtet? Die Lösung muss folgende Form haben:

# of sections | Instructor ID # | FirstName | LastName  

(Ich verwende das „|“ nur zur Veranschaulichung – die Lösung verwendet eigentlich nur Leerzeichen.)

Bisher habe ich Folgendes getan:

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

( sem092ist die erste Datei, die ich erwähnt habe)

Und das Ergebnis warAlsokommt dem nahe, was ich brauche. Aus dem obigen Code habe ich Folgendes erhalten:

Num. of Sections Taught |  Instructor ID #

Irgendwie muss ich über Pipes die ID-Nummer mit den Namen in der anderen Datei abgleichen. Ich habe das starke Gefühl, dass ich verwenden muss grep. Ich suche niemanden, der mir „die Hand hält“. Ich finde das äußerst interessant, aber ich glaube, ich habe unterwegs etwas übersehen und brauche ein oder zwei Anstöße.

Antwort1

Speichern Sie die Ausgabe Ihres Befehls:

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

Speichern Sie diese Zeile in der Datei 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

Dieses Skript geht davon aus, dass die firtsPart.txtZeile wie folgt aussieht:

5 T00005

und das instructorListist der Name der Datei mit 6 Feldern.

Versuchen Sie abschließend:

bash searchInstructorName.sh firstPart.txt

es sollte funktionieren.


Dies ist die Version mit einem einzelnen Skript:

 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

Speichern Sie diese Zeilen searchInstructorInfo.shund führen Sie aus:

 bash searchInstructorInfo.sh sections/sem092 instructorList

Antwort2

Vielen Dank für deine ausführlichen Antworten, Letizia. Ich habe Teile deines Codes verwendet und ein Teil davon wiederum hat mir weitere Ideen gegeben. Nur um diesen Beitrag nicht in der Schwebe zu lassen: Mein endgültiger (grauenhafter) Code sah so aus:

 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

Ich weiß, dieser Code ist beschämend – ich habe ihn heute meinem Professor gezeigt und er meinte: „Hmm … mal sehen. Was hast du hier gemacht?“ lol. Aber nachdem er ihn sich angeschaut hatte, meinte er, er sei in Ordnung. Er sagt immer: „Es gibt mehr als einen Weg, die sprichwörtliche Katze zu häuten.“

Vielen Dank an alle für die Hilfe, insbesondere an Letizia.

verwandte Informationen