Mam wbudowany system linuksowy korzystający z Busybox (OpenWRT) - więc polecenia są ograniczone. Mam dwa pliki, które wyglądają:
pierwszy plik
aaaaaa
bbbbbb
cccccc
mmmmmm
nnnnnn
drugi plik
mmmmmm
nnnnnn
yyyyyy
zzzzzz
Muszę scalić te 2 listy w 1 plik i usunąć duplikaty. Nie mam diff (przestrzeń jest ograniczona), więc dostać się do wykorzystania wielkiego awk
, sed
i grep
(lub innych narzędzi, które mogą być zawarte w standardowym przykład BusyBox). Przechodzenie do pliku scalania, takiego jak:
command1 > mylist.merge
command2 mylist.merge > originallist
jest całkowicie w porządku. To nie musi być polecenie jednowierszowe.
Aktualnie zdefiniowane funkcje w przypadku Busybox, którego używam (domyślny OpenWRT): [, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, crontab, wytnij, data, dd, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep, znajdź, wolny, 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, sortowanie, start-stop-demon, ciągi, katalog_główny_switcha, synchronizacja, sysctl, syslogd, tail, tar, tee, telnet, telnetd, test,czas, góra, dotyk, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, które, xargs, tak, zcat
-u
.W jednym poleceniu bez potoku:
Szukaj
-> http://www.busybox.net/downloads/BusyBox.html
źródło
sort file1 file2 file3 file4 | uniq
lubsort -u file1 file2 file3 file4
Inne rozwiązanie:
źródło
Aby posortować według niektórych kluczowych kolumn, użyj:
tutaj rozważ pierwszą, drugą i trzecią kolumnę jako klucz podstawowy.
źródło
Pliki na twoje pytanie są posortowane.
Jeśli pliki źródłowe są rzeczywiście posortowane, możesz uniq i scalić w jednym kroku:
Do sortowania numerycznego (nie alfanumerycznego) użyj:
Tego nie można było zrobić w miejscu (przekierowano do jednego pliku źródłowego).
Jeśli pliki nie są posortowane, posortuj je (można to zrobić na miejscu, korzystając z opcji sortowania
-o
. Cały plik należy jednak załadować do pamięci):Byłoby to szybsze niż prostszy „jeden wiersz poleceń” do sortowania wszystkich:
Jednak ta linia może być przydatna w przypadku małych plików.
źródło