unix命令用于执行与set操作等效的列表比较

时间:2016-04-24 15:33:49

标签: bash shell unix command-line

我可以使用什么unix命令/实用程序根据下面的2个列表创建我的最终名单?这就像做SET操作一样。但是,主要的比较必须是NameList1。如果NameList2有额外的名称,请不要将其包含在主列表中。

注意:我不能对它进行排序(按字母顺序等)。我需要保留列位置(自然顺序),因为我已经在列表顶部,向下提供了。谢谢你的帮助。

NameList1:

Joe
John
Mary
Mike
Allan
David
Andrew
Matt

NameList2:

Joe
John
Mary
George
Jeff
Allan
David
Andrew
Frank

如果我通过并排比较进行diff,您可以看到比较结果。像这样:

-bash-4.1$ diff --side-by-side NameList1.txt NameList2.txt
Joe                             Joe
John                                John
Mary                                Mary
Mike                                  | George
                                  > Jeff
Allan                               Allan
David                               David
Andrew                              Andrew
Matt                                  | Frank

我最终名单的结果将是:

Joe
John
Mary
Mike
Allan
David
Andrew
Matt

从NameList1中删除George, Jeff, Frank的位置。我如何制作最终清单?有更好的工具命令吗?我正确使用diff吗?

1 个答案:

答案 0 :(得分:1)

这可以使用简单的join命令来实现。 在我的Mac中,以下给出了预期的结果

join -a1 NameList1 NameList2

>      -a file_number
>                  In addition to the default output, produce a line for each
>                  unpairable line in file file_number.

修改

在Linux上,--no-checkorder选项会避免检查输入的排序顺序。

join -a1 --nocheck-order NameList1 NameList2