使用awk组合两个表来创建新结果

时间:2013-09-10 15:11:38

标签: join awk gawk tabular

需要帮助组合/加入两个表格。

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

1 个答案:

答案 0 :(得分: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