Eu tenho um sistema Linux embutido usando o Busybox (OpenWRT) - portanto, os comandos são limitados. Eu tenho dois arquivos que se parecem com:
primeiro arquivo
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
segundo arquivo
mmmmmm
nnnnnn
yyyyyy
zzzzzz
Preciso mesclar essas 2 listas em 1 arquivo e remover as duplicatas. Eu não tenho diff (o espaço é limitado) então temos de usar o grande awk
, sed
e grep
(ou outras ferramentas que podem ser incluídos em uma instância Busybox standard). 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 (OpenWRT padrão): [, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd, df, dirname, dmesg, du, eco, egrep, env, expr, false, fgrep, encontre, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid, hwclock, id, ifconfig, init, insmod, kill, killall, klogd, less, ln, lock, logger, logread, ls, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp, montagem, mv, nc, netmsg, netstat, nice, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6, pivot_root, pkill, poweroff, printf, ps, pwd, reboot, reset, rm, rmdir, rmmod, rota, sed, seq, sh, sleep, sort, start-stop-daemon, strings, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd, teste,tempo, topo, toque, tr, traceroute, true, udhcpc, umount, uname, uniq, tempo de atividade, vconfig, vi, watchdog, wc, wget, what, xargs, yes, zcat
-u
.Em apenas um comando sem canal:
procurar
-> http://www.busybox.net/downloads/BusyBox.html
fonte
sort file1 file2 file3 file4 | uniq
ousort -u file1 file2 file3 file4
Outra solução:
fonte
Para classificar de acordo com alguma coluna-chave, use o seguinte:
aqui considere a primeira, a segunda e a terceira coluna como sua chave primária.
fonte
Os arquivos da sua pergunta estão classificados.
Se os arquivos de origem forem realmente classificados, é possível uniq e mesclar em uma etapa:
Para classificação numérica (não alfanumérica), use:
Isso não pôde ser feito no local (redirecionado para um arquivo de origem).
Se os arquivos não forem classificados, classifique-os (essa classificação pode ser feita no local, usando a opção de classificação
-o
. No entanto, o arquivo inteiro precisa ser carregado na memória):Isso seria mais rápido do que a "linha de comando" mais simples para classificar tudo:
No entanto, essa linha pode ser útil para arquivos pequenos.
fonte