Mesclando arquivos por linhas

3

É possível copiar as linhas inteiras de File1 em um novo File3 seguindo a instrução dada por File2 usando um script bash simples usando sed ou awk ?

File1: /*two or more columns*/
AC    456324
DC    689712
GH    123677
KL    236587

File2: /*one column*/
AC
DC

File3: 
AC    456324
DC    689712

Na verdade, estou fazendo isso usando dicionários Python e me perguntei se você conhecia uma saída simples.

    
por dovah 10.07.2014 / 17:33

2 respostas

5

com grep

grep -Ff File2 File1

com awk

awk 'NR==FNR {a[$1]++;next} a[$1]' File2 File1
    
por 10.07.2014 / 17:41
2

Você pode usar join para combinar linhas de dois arquivos unindo-as onde uma determinada coluna possui as mesmo valor em ambos os arquivos. Observe que os arquivos de entrada precisam ser classificados pelos valores nessa coluna.

join File1 File2

Se os arquivos não estiverem classificados, no bash / ksh93 / zsh:

join <(sort File1) <(sort File2)

Aqui, o campo a ser associado é aquele que contém AC , DC , etc. Veja um exemplo se o campo a ser unido for a coluna 3 em File1 com a coluna 2 em File2 .

join -1 3 -2 2 <(sort -k3,3 File1) <(sort -k 2,2 File2)
    
por 11.07.2014 / 02:15