J'ai un système Linux intégré utilisant Busybox (OpenWRT) - les commandes sont donc limitées. J'ai deux fichiers qui ressemblent à:
premier fichier
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
deuxième fichier
mmmmmm
nnnnnn
yyyyyy
zzzzzz
Je dois fusionner ces 2 listes en 1 fichier et supprimer les doublons. Je n'ai pas diff ( l' espace est limité) donc on arrive à utiliser la grande awk
, sed
et grep
(ou d' autres outils qui pourraient être inclus dans une instance norme Busybox). Accéder à un fichier de fusion comme:
command1 > mylist.merge
command2 mylist.merge > originallist
est totalement ok. Ce ne doit pas être une commande sur une seule ligne.
Fonctions actuellement définies dans l'instance de Busybox que j'utilise (OpenWRT par défaut): [, [[, 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, stop, 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, tri, start-stop-daemon, strings, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd, test,temps, haut, toucher, tr, traceroute, vrai, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, which, xargs, yes, zcat
-u
.En une seule commande sans aucun tuyau:
chercher
-> http://www.busybox.net/downloads/BusyBox.html
la source
sort file1 file2 file3 file4 | uniq
ousort -u file1 file2 file3 file4
Une autre solution:
la source
Pour trier selon une colonne clé, utilisez ce qui suit:
considérez ici la première, la deuxième et la troisième colonne comme votre clé primaire.
la source
Les fichiers de votre question sont triés.
Si les fichiers source sont effectivement triés, vous pouvez unifier et fusionner en une seule étape:
Pour le tri numérique (pas alphanumérique), utilisez:
Cela ne pouvait pas être fait sur place (redirigé vers un fichier source).
Si les fichiers ne sont pas triés, triez-les (ce tri peut être effectué sur place, en utilisant l'option de tri
-o
. Cependant, le fichier entier doit être chargé en mémoire):Ce serait plus rapide que la "ligne de commande" plus simple pour tout trier:
Cependant, cette ligne pourrait être utile pour les petits fichiers.
la source