join - 使用 awk 合并两个表以创建新结果

标签 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 的替代方案持开放态度。

最佳答案

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

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

关于join - 使用 awk 合并两个表以创建新结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18722631/

相关文章:

mysql - 加入时间戳范围

sql - 根据一个变量的值有条件地组合多个数据集/表

SQL 查询计数 - 连接两个表并获得一个计数,即使它是 0

linux - 使用 awk 解析在字段中包含逗号的制表符分隔文件

mysql - 如何从一个表中选择行并按另一个表中的列的总和对其进行排序?

awk - 当另一列中有相同名称时计算一列的平均值

bash - 删除模式前的所有内容

arrays - AWK 输出到 bash 数组

bash - 重新排列文件中的数据(不是直接转置)

regex - awk 扩展模式匹配(在已匹配字符串的操作中嵌入模式匹配)