需要组合/连接两个表的帮助。
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/