У меня есть две таблицы с различными числами столбцов и строк. Я хочу найти строки с помощью общего столбца (столбец 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
Можно сделать такого рода вещь путем создания хеша / ассоциативный массив / справочная таблица, например, использования 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
команда - но это требует, чтобы исходные данные были отсортированы на общем поле.
Добавить к ответу @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