2013-09-10 4 views
2

Нужна помощь в объединении/объединении двух таблиц.Использование awk для объединения двух таблиц для создания нового результата

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).

  • Термин_локатор представляет собой уникальный номер (то есть первое число в списке равно 1, а последнее число больше 4290).

Моя платформа:

  • для Windows 7 64-бит с 8 Гб оперативной памяти; GnuWin32 и gawk-3.1.6.

Для решения этой проблемы можете использовать другие утилиты GnuWin32.

Доступ к альтернативе awk.

ответ

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
+0

хороший ответ с объяснением. +1 – Kent

+0

нет проблем, что порядок строк отличается; пока тройка верна. Лемм поработает с этим и вернётся к вам. Будет проверять, чтобы увидеть, что у меня есть «присоединиться». –

+0

прекрасный, спасибо. –

Смежные вопросы