Как я могу извлечь записи со столбцом вместе?

У меня есть две таблицы с различными числами столбцов и строк. Я хочу найти строки с помощью общего столбца (столбец B вместе). Вот пример. Вы могли помочь?

file1.txt

A  B    C   D
a  b    c   d
i  ii  iii iV
*  **   #  ##

file2.txt

E  B  
f  ff 
h  b
g  gg
k  ii

вывод:

A  B    C   D  E
a  b    c   d  h
i  ii  iii iV  k
6
задан 17 December 2018 в 04:36

2 ответа

Можно сделать такого рода вещь путем создания хеша / ассоциативный массив / справочная таблица, например, использования Awk:

$ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
A  B    C   D E
a  b    c   d h
i  ii  iii iV k

Существует также join команда - но это требует, чтобы исходные данные были отсортированы на общем поле.

7
ответ дан 23 November 2019 в 07:25

Добавить к ответу @steeldriver, сделать это с sort и join:

join -j 2 -o 1.1,0,1.3,1.4,2.1 <(sort -k 2 file1.txt)  <(sort -k 2 file2.txt)
  • -j 2 говорит join какое поле является ключом.
  • -o дает распоряжение полей в выводе, где 0 общий ключ, и другие FILENUM.FIELD. Посмотрите man join для деталей.
  • -k 2 говорит sort какое поле является ключом.
  • <( ) bash замена процесса.

Вывод:

a b c d h
A B C D E
i ii iii iV k
5
ответ дан 23 November 2019 в 07:25

Другие вопросы по тегам:

Похожие вопросы: