【发布时间】:2016-10-10 17:13:29
【问题描述】:
我有一个名为“hosts.tbl”的文本文件:
BILL RED
VAL YELLOW
STEVE YELLOW
TOM ORANGE
BILLY RED
VALERIE BLUE
我有第二个文件,名为“details.tbl”,上面的每个名称都有多次(在每一行的各种其他详细信息中)。我需要计算每个名称在“details.tbl”中出现的次数,最终得到如下结果:
BILL RED 8
VAL YELLOW 16
STEVE YELLOW 9
TOM ORANGE 1
BILLY RED 2
VALERIE BLUE 30
如您所见,“BILL”的普通“grep”将同时给出“BILL”和“BILLY”。 “VAL”和“VALERIE”也一样。但是,在“details.tbl”文件中,每个名称的每次出现都后跟“-C”。例如:
STEVE-C
STEVE-C
BILL-C
BILLY-C
我试过了:
awk {'print $1 " " $2 " "'} hosts.tbl|grep -c $1"-C" details.tbl
awk {'print $1 " " $2 " "'grep -c $1"-C" details.tbl} hosts.tbl
...以及类似语法的各种其他排列,以上...所有令人沮丧的失败。很明显,我是一个新手,尤其是在 shell 命令方面,尤其是在 UNIX 方面。我在这里错过了什么?我在手册页中找不到有关如何在 grep 中连接搜索条件或如何仅将特定字段从 awk 传递给 grep 的任何内容。
假设 details.tbl 文件的适用部分如下所示:
BILL-C
VAL-C
STEVE-C
TOM-C
BILLY-C
VALERIE-C
BILL-C
VAL-C
STEVE-C
TOM-C
BILLY-C
VALERIE-C
输出应如下所示:
BILL RED 2
VAL YELLOW 2
STEVE YELLOW 2
TOM ORANGE 2
BILLY RED 2
VALERIE BLUE 2
【问题讨论】:
-
不清楚您是否认为 return BILL 和 BILLY(例如)是您所需要的。鉴于您的
-C文件,请编辑您的 Q 以显示 2 个条目之一的预期输出。 (虽然在这种情况下没有必要,但最好继续标记您的 AIX Q,因为该系统与 Linux 非常不同,甚至与其他供应商的旧式 Unixens 不同)。祝你好运。 -
解释不同(如果我理解得很好):我有一个文件
hosts.tbl,上面有名字和姓氏。另一个文件details.tbl只有名字,后面跟着-C。hosts.tbl中的所有名字都是唯一的。我想计算所有的名字并告诉他们他们的姓氏。