Imprime o padrão no primeiro arquivo quando há uma correspondência no segundo arquivo

0

Eu tenho esses arquivos.

arquivo1.txt

A
B
C
D
E

arquivo2.txt

A 1
B 2
D 3

Minha saída desejada é a seguinte:

A
B
D

Eu tentei usar grep -Ff file1.txt file2.txt , mas o resultado é

A 1
B 2
D 3
    
por peon 09.08.2016 / 08:44

2 respostas

2

Trabalho para join :

join -o 1.1 f1.txt f2.txt

por padrão join junta-se no primeiro campo delimitado por espaço em branco dos arquivos. -o 1.1 especifica a saída, estamos interessados apenas no primeiro campo do primeiro arquivo.

Se os arquivos não estiverem classificados, você precisará primeiro sort deles:

join -o 1.1 <(sort f1.txt) <(sort f2.txt)

Exemplo:

$ cat f1.txt                    
A
B
C
D
E

$ cat f2.txt                    
A 1
B 2
D 3

$ join -o 1.1 f1.txt f2.txt 
A
B
D
    
por 09.08.2016 / 08:49
0

Embora join seja muito mais fácil do que este, mas você também pode tentar usar esse awk ,

awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt

Demo

$ cat file1.txt                    
A
B
C
D
E

$ cat file2.txt                    
A 1
B 2
D 3

$ awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt
A
B
D
    
por 09.08.2016 / 09:20