como extrair algumas linhas em um arquivo de dados, comparando com outro arquivo de dados? (fusão) [duplicado]

1

Eu tenho dois arquivos diferentes:

first file:
id1 19501112
id2 19831207
1d4 20001212
id6 20000101
id10 20061213
id11 20081212
id12 20100109
id13 20101218
id14 20101212
id15 20111111
id16 20150919
id20 20141415

e segundo arquivo:

id100
id2
id4
id44
id10
id16
id2000
id34
id5
id7

, então eu quero extrair essas linhas no arquivo 1, que ids são em comum com ids no segundo arquivo. então eu quero o meu arquivo de saída se parece com:

id2 19831207
1d4 20001212
id10 20061213
id16 20150919

alguma sugestão por favor?

    
por zara 01.10.2015 / 02:39

1 resposta

2

Usando o GNU grep:

grep -w -f file2.txt file1.txt 

Isto diz ao grep para combinar apenas com "palavras" inteiras, e para obter a lista de padrões para procurar no arquivo2.txt

Se houver alguma chance de que o conteúdo do arquivo2.txt possa aparecer no restante das linhas do arquivo1.txt, você poderá usar a substituição de processo do sed e do bash da seguinte forma:

grep -f <(sed -e 's/^/^/ ; s/$/\b/' file2.txt) file1.txt

Isso usa sed para transformar cada linha idN em ^idN\b antes de usá-la em grep -f .

    
por 01.10.2015 / 02:53