
好吧,我希望這是一個正確的提問地點。我有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
我知道這段程式碼令人羞愧 - 我今天給我的教授看了,他說:“嗯......讓我看看。你在這裡做了什麼?”哈哈。但他看了之後卻說還好。他總是說:「剝貓皮的方法不只一種」。
感謝大家的幫助 - 即萊蒂齊亞。