Tengo un sistema Linux integrado que usa Busybox (OpenWRT), por lo que los comandos son limitados. Tengo dos archivos que se parecen a:
primer archivo
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
segundo archivo
mmmmmm
nnnnnn
yyyyyy
zzzzzz
Necesito fusionar estas 2 listas en 1 archivo y eliminar los duplicados. No tengo diff (el espacio es limitado) por lo que tenemos que utilizar el gran awk
, sed
y grep
(u otras herramientas que podrían incluirse en un caso estándar Busybox). Ir a un archivo de fusión como:
command1 > mylist.merge
command2 mylist.merge > originallist
está totalmente bien No tiene que ser un comando de una sola línea.
Funciones definidas actualmente en la instancia de Busybox que estoy usando (OpenWRT predeterminado): [, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep, find, 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, mount, mv, nc, netmsg, netstat, nice, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6, pivot_root, pkill, poweroff, printf, ps, pwd, reboot, reset, rm, rmdir, rmmod, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd, test,tiempo, superior, táctil, tr, traceroute, verdadero, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, cual, xargs, sí, zcat
-u
.En un solo comando sin ninguna tubería:
buscar
-> http://www.busybox.net/downloads/BusyBox.html
fuente
sort file1 file2 file3 file4 | uniq
osort -u file1 file2 file3 file4
Otra solución:
fuente
Para ordenar de acuerdo con alguna columna clave, use lo siguiente:
aquí considere la primera, segunda y tercera columna como su clave principal.
fuente
Los archivos de su pregunta están ordenados.
Si los archivos de origen están ordenados, puede unificar y fusionar en un solo paso:
Para la ordenación numérica (no alfanumérica), use:
Eso no se pudo hacer en el lugar (redirigido a un archivo fuente).
Si los archivos no están ordenados, ordénelos (este orden podría hacerse en su lugar, utilizando la opción de ordenar
-o
. Sin embargo, todo el archivo debe cargarse en la memoria):Eso sería más rápido que la simple "línea de comando" para ordenar todo:
Sin embargo, esta línea podría ser útil para archivos pequeños.
fuente