Como mesclar as diferentes linhas de arquivos?

4

Qual é a maneira mais rápida de mesclar as diferentes linhas de arquivos? Por exemplo, eu tenho dois arquivos:

a.txt:

foo  
bar
foobar

b.txt

foo
foobar
line
by
bar

Eu gostaria de obter a seguinte saída:

foo
bar
foobar
line
by

Existe alguma maneira rápida de mesclar arquivos como o exemplo acima? (A ordem das linhas não é importante)

    
por kbenda 31.08.2018 / 12:14

3 respostas

8

Use awk seen se você não quiser classificar o arquivo:

$ awk '!seen[$0]++' a.txt b.txt
foo  
bar
foobar
line
by
    
por 31.08.2018 / 12:26
10
$ sort -u a.txt b.txt
bar
by
foo
foobar
line

Isso ordenaria o conteúdo (combinado) dos dois arquivos, removendo as linhas duplicadas. A desvantagem é que, se uma linha for duplicada em um dos arquivos, isso também será removido.

Para gravar o resultado em c.txt , use

sort -u -o c.txt a.txt b.txt

ou um redirecionamento padrão

sort -u a.txt b.txt >c.txt
    
por 31.08.2018 / 12:21
5

Com base em sua saída desejada, presumo que você queira apenas que os dois arquivos sejam mesclados somente com strings exclusivas.

Nesse caso, cat , sort e uniq podem fazer isso para você:

cat a.txt b.txt | sort | uniq > c.txt

cat abre o conteúdo de ambos os arquivos

sort classifica a saída em ordem alfabética

uniq lista somente strings exclusivas

> c.txt coloca toda a saída em um novo arquivo c.txt

    
por 31.08.2018 / 12:22

Tags