Eu acho que
sort file1 file2 | uniq
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
yyyyyy
zzzzzz
fará o que você quiser.
Eu tenho um sistema Linux embutido usando o Busybox (OpenWRT) - então os comandos são limitados. Eu tenho dois arquivos semelhantes:
primeiro arquivo
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
segundo arquivo
mmmmmm
nnnnnn
yyyyyy
zzzzzz
Eu preciso mesclar essas duas listas em um arquivo e remover as duplicatas. Eu não tenho diff (o espaço é limitado), então usamos o ótimo awk
, sed
e grep
(ou outras ferramentas que podem ser incluídas em uma instância padrão do Busybox). Indo para um arquivo de mesclagem como:
command1 > mylist.merge
command2 mylist.merge > originallist
está totalmente ok. Não precisa ser um comando de linha única.
Funções atualmente definidas na instância do Busybox que estou usando (padrão OpenWRT): [ [[arping, ash, awk, nome base, brctl, bunzip2, bzcat, gato, chgrp, chmod, chown, chroot, claro, cmp, cp, crond, crontab, corte, data, dd, df, dirname, dmesg, du, eco, egrep, env, expr, falso, fgrep, achado, livre, fsync, grep, gunzip, gzip, parada, cabeça, hexdump, hostid, hwclock, id, ifconfig, init, insmod, matar, killall, klogd, less, ln, bloqueio, logger, logread, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp, montagem, mv, nc, netmsg, netstat, agradável, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6, pivot_root, pkill, poweroff, printf, ps, pwd, reiniciar, redefinir, rm, rmdir, rmmod, rota, sed, seq, sh, sono, tipo, start-stop-daemon, strings, switch_root, sincronização, sysctl, syslogd, final, tar, tee, telnet, telnetd, teste, tempo, superior, toque, tr, traceroute, verdadeiro, udhcpc, umount, uname, uniq, tempo de atividade, vconfig, vi, watchdog, wc, wget, que, xargs, sim, zcat
Em apenas um comando sem nenhum canal:
sort -u FILE1 FILE2
pesquisa
Suppress duplicate lines
- > link
Outra solução:
awk '!a[$0]++' file_1 file_2
Para classificar de acordo com alguma coluna-chave, use o seguinte:
awk '!duplicate[$1,$2,$3]++' file_1 file_2
considere a primeira, segunda e terceira coluna como sua chave primária.
Os arquivos da sua pergunta são classificados.
Se os arquivos de origem forem realmente classificados, você poderá uniq e mesclar em uma única etapa:
sort -um file1 file2 > mylist.merge
Para classificação numérica (não alfanumérica), use:
sort -num file1 file2 > mylist.merge
Isso poderia não ser feito no local (redirecionado para um arquivo de origem).
Se os arquivos não estiverem classificados, classifique-os (esse tipo pode ser feito no lugar, usando a opção de classificação -o
. No entanto, o arquivo inteiro precisa ser carregado na memória):
sort -uo file1 file1
sort -uo file2 file2
sort -um file1 file2 > mylist.merge
mv mylist.merge originallist
Isso seria mais rápido do que a simples "linha de comando" para classificar todos:
cat file1 file2 | sort -u >mylist.merge
No entanto, esta linha pode ser útil para arquivos pequenos.