Use grep
:
grep -Fwf file1 file2
de man grep
:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings (instead of regular expressions), separated by
newlines, any of which is to be matched.
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. If this option is used multiple times or is combined with
the -e (--regexp) option, search for all patterns given. The empty file contains zero patterns, and
therefore matches nothing.
-w, --word-regexp
Select only those lines containing matches that form whole words. The test is that the matching
substring must either be at the beginning of the line, or preceded by a non-word constituent
character. Similarly, it must be either at the end of the line or followed by a non-word
constituent character. Word-constituent characters are letters, digits, and the underscore.
Ou awk
:
awk 'NR==FNR{seen[$0]++} ($2 in seen)' file1 file2
Acima, primeiro nós estamos lendo o arquivo1 e mantemos toda a coluna1 em uma matriz chamada vista , então olhamos no arquivo2 em sua segunda coluna e se ela é correspondida com a coluna1 salva do arquivo1, em seguida, vai imprimir toda a linha do arquivo2.
Você também tem o comando join
se ambos os arquivos estiverem classificados (se não, você pode passar a saída classificada por sort
ing):
join -1 1 -2 2 file1 file2
de man join
-1 FIELD
join on this FIELD of file 1
-2 FIELD
join on this FIELD of file 2
se os arquivos não forem classificados:
join -1 1 -2 2 <(sort file1) <(sort file2)