intersecção de dois arquivos de acordo com a primeira coluna

7

Eu tenho dois arquivos no arquivo A, há sequence_numbers no outro arquivo B, há muitas colunas, e a primeira coluna é números sequenciais, Eu quero pegar um arquivo com todas as linhas no B com os números de seqüência que estão no A como posso conseguir isso? obrigado

arquivo A

1
3
8
9
20

arquivo B

1 kfjk 3243424
2 fkdkf 23543592
3 iefjk 21493402
7 dlafdl 23435231
8 kfkdlkf 309834
    
por wenzi 16.11.2012 / 12:40

1 resposta

9

Você quer join (1) , eu acho:

For each pair of input lines with identical join fields, write a line to standard output. The default join field is the first, delimited by whitespace. When FILE1 or FILE2 (not both) is -, read standard input.

[0 1075 12:50:10] ~/temp/sx % join A B
1 kfjk 3243424
3 iefjk 21493402
8 kfkdlkf 309834
join: file 1 is not in sorted order

OK, então aparentemente você precisa combinar isso com sort (1) para classificar por valor alfa (não valor numérico, então 20 < 3)

join <(sort A) <(sort B) funciona para mim, mas isso parece estranho e pode ser uma extensão zsh. Não há mal em fazer

sort A > A.tmp; sort B > B.tmp; join A.tmp B.tmp

(Como sempre, verifique as páginas de manual quanto a armadilhas.)

    
por 16.11.2012 / 12:49