如何將一個文件中的數字與另一個文件中的名稱相符?

如何將一個文件中的數字與另一個文件中的名稱相符?

好吧,我希望這是一個正確的提問地點。我有2個文件。

第一個文件有 4 個欄位:班級 CRN #、教師 ID #、班級部分 #、學生人數。

例子:

0002  T00005  006  15
0004  T00004  012  26
.
.
etc

第二個文件有 6 個欄位(據我所知):講師 ID 號碼、名字、姓氏、建築物、區號、電話號碼。

(不確定名字/姓氏是 1 個還是兩個欄位...)

例子:

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

我知道這段程式碼令人羞愧 - 我今天給我的教授看了,他說:“嗯......讓我看看。你在這裡做了什麼?”哈哈。但他看了之後卻說還好。他總是說:「剝貓皮的方法不只一種」。

感謝大家的幫助 - 即萊蒂齊亞。

相關內容