2

需要帮助组合/连接两个表。

Table_1将项目 (item_ID) 分配给术语 (term_ID)。

item_ID    term_ID
-------    -------
C051890    C535944
C061133    C535944
C402769    C535944
D000082    C535944
C006632    D017624
C051890    D017624

Table_2标识术语在编号列表 (term_locator) 中的位置(行号)。

term_ID    term_locator
-------    ------------
C535944    1340
C535944    1523
C535944    1829
C535944    1864
D017624    1277
D017624    4290

如何使用awk生成 table_1 和 table_2 的组合?例如,所需的输出是Table_3.

item_ID    term_ID    term_locator
-------    -------    ------------
C051890    C535944    1340
C061133    C535944    1340
C402769    C535944    1340
D000082    C535944    1340
C051890    C535944    1523
C061133    C535944    1523
C402769    C535944    1523
D000082    C535944    1523
C051890    C535944    1829
C061133    C535944    1829
C402769    C535944    1829
D000082    C535944    1829
C051890    C535944    1864
C061133    C535944    1864
C402769    C535944    1864
D000082    C535944    1864
C006632    D017624    1277
C051890    D017624    1277
C006632    D017624    4290
C051890    D017624    4290

附加信息:

  • 一个项目可以分配给多个术语(例如,C051890 分配给 C535944 和 D017624)。

  • term_locator 是唯一的数字(即列表中的第一个数字是 1,最后一个数字大于 4290)。

我的平台:

  • Windows 7 64 位,8GB 内存;GnuWin32 和gawk-3.1.6.

可以使用其他 GnuWin32 实用程序来解决这个问题。

我愿意替代awk.

4

1 回答 1

4

我的解决方案并不完美,但很简单:

join -1 2 -2 1 -o 1.1,1.2,2.2 table1.txt table2.txt

输出

item_ID term_ID term_locator
------- ------- ------------
C051890 C535944 1340
C051890 C535944 1523
C051890 C535944 1829
C051890 C535944 1864
C061133 C535944 1340
C061133 C535944 1523
C061133 C535944 1829
C061133 C535944 1864
C402769 C535944 1340
C402769 C535944 1523
C402769 C535944 1829
C402769 C535944 1864
D000082 C535944 1340
D000082 C535944 1523
D000082 C535944 1829
D000082 C535944 1864
C006632 D017624 1277
C006632 D017624 4290
C051890 D017624 1277
C051890 D017624 4290

讨论

  • 线序有点不同
  • 您必须join安装命令
  • 标志-1 2 -2 1只是说:将 file1/column2 与 file2/column1 连接起来
  • 标志显示-o 1.1,1.2,2.2:输出 file1/column1、file1/column2 和 file2/column2
  • 根据命令行顺序,file1=table1.txt,file2=table2.txt
于 2013-09-10T15:31:24.650 回答