如何将一个文件中的数字与另一文件中的名称相匹配?

如何将一个文件中的数字与另一文件中的名称相匹配?

好吧,我希望这是一个正确的提问地点。我有2个文件。

第一个文件有 4 个字段:班级 CRN #、教师 ID #、班级部分 #、学生人数。

例子:

0002  T00005  006  15
0004  T00004  012  26
.
.
etc

第二个文件有 6 个字段(据我所知):教师 ID 号、名字、姓氏、建筑物、区号、电话号码。

(不确定名字/姓氏是 1 个还是 2 个字段...)

例子:

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

我知道这段代码令人羞愧 - 我今天给我的教授看了,他说:“嗯......让我看看。你在这里做了什么?”哈哈。但他看了之后却说还好。他总是说:“剥猫皮的方法不止一种”。

感谢大家的帮助 - 即莱蒂齐亚。

相关内容