好吧,我希望这是一个正确的提问地点。我有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
我知道这段代码令人羞愧 - 我今天给我的教授看了,他说:“嗯......让我看看。你在这里做了什么?”哈哈。但他看了之后却说还好。他总是说:“剥猫皮的方法不止一种”。
感谢大家的帮助 - 即莱蒂齐亚。