Mam dwa pliki z posortowanymi liniami. Jeden plik (B) jest podzbiorem drugiego pliku (A). Chciałbym znaleźć wszystkie linie w A, które NIE SĄ w B. Idealnie, chciałbym stworzyć plik (C), który zawiera te linie. Czy to możliwe w systemie Unix? Poszukuję polecenia jednego wiersza, aby to zrobić zamiast pisać skrypt. Spojrzałem na polecenia join
i diff
, ale nie mogłem znaleźć opcji polecenia, aby to zrobić. Dzięki za pomoc.Jak znaleźć zestaw - podzbiór dwóch plików z wiersza poleceń?
Odpowiedz
To będzie tłumić wspólne linie:
comm -3 a b
Jak o tym:
grep -v -f B A > C
Można to zrobić z diff również. Różnica (w przeciwieństwie do użytkownika @ johlo grep odpowiedzi) troszczy się o zamówienie, działa na plikach nie segregowanych (w przeciwieństwie do użytkownika @ johnshen64 komunikatora odpowiedź):
$ cat a
a
b
c
d
e
$ cat b
a
b
f
d
e
$ diff -dbU0 a b
--- a 2012-05-18 16:02:30.603386016 -0400
+++ b 2012-05-18 16:02:45.547817122 -0400
@@ -3 +3 @@
-c
+f
Więc można użyć rurociągu dostać tylko pominięte linie-rozważają zamówienie:
$ diff -dbU0 a b | tail -n +4 | grep ^- | cut -c2-
c
awk Rozwiązanie
pliki wejściowe
aaa
bbb
ccc
b
ccc
ddd
eel
kod
awk ' NR==FNR { A[$0]=1; next; }
{ if ($0 in A) { A[$0]=0; } }
END { for (k in A) { if (A[k]==1) { print k; } } } ' a b > c
C (plik wyjścia)
bbb
aaa
OP specjalnie proszony o rozwiązanie nie-skryptowe. Biorąc pod uwagę, umieściłeś skrypt w wierszu poleceń, ale ... – derobert
Polecenie join
zrobi to pytasz:
join -v 1 fileA fileB > fileC
Demonstrację:
$ cat fileA
a
c
d
g
h
t
u
v
z
$ cat fileB
a
d
g
t
u
z
$ join -v 1 fileA fileB
c
h
v
Zakłada pliki posortowane jak stwierdził w swoim pytaniu. Dla nieposortowane plików:
join -v 1 <(sort fileA) <(sort fileB)
- 1. Zestaw skrzyżowań i zestaw różnicy rekordów dwóch plików z hadoopem
- 2. Jak mogę porównać wyjście dwóch poleceń uniksowych, aby znaleźć różnicę?
- 3. Uruchom ColdFusion z wiersza poleceń
- 4. Jak korzystać z csslint z wiersza poleceń?
- 5. Wykonaj Pitest z wiersza poleceń
- 6. Jak uruchomić aplikację Android z wiersza poleceń?
- 7. Wejście z wiersza poleceń
- 8. Jak zwijanie wiersza poleceń?
- 9. Jak korzystać z jarjar z wiersza poleceń?
- 10. Sprawdzanie składni języka C# z wiersza poleceń
- 11. Turing Kompletny alfanumeryczny zestaw instrukcji x86 (podzbiór)
- 12. okna wiersza poleceń javascript
- 13. Wyjście z drzewa wiersza poleceń
- 14. Jak znaleźć połączenie dwóch zestawów zapytań Django?
- 15. Jak dołączyć debuggera do wiersza poleceń mstest
- 16. Jak napisać aplikację z wiersza poleceń OSGI
- 17. Jak ustawić strefę czasową z wiersza poleceń?
- 18. Jak ładnie wydrukować XML z wiersza poleceń?
- 19. Jak zaktualizować zależności Gradle z wiersza poleceń?
- 20. Jak wykonać kod PHP z wiersza poleceń?
- 21. Jak uruchomić Scala + specyfikacje2 z wiersza poleceń?
- 22. Jak uzyskać zmienną CMake z wiersza poleceń?
- 23. Jak uruchomić profiler z wiersza poleceń?
- 24. Jak uruchomić QUnit testy z wiersza poleceń?
- 25. Jak zainstalować wtyczki jenkins z wiersza poleceń?
- 26. Jak uzyskać dokumentację Ruby z wiersza poleceń
- 27. Jak wywołać GUI Graphviz z wiersza poleceń?
- 28. Jak otworzyć plik z wiersza poleceń z określonym programem?
- 29. Narzędzie Deflate z wiersza poleceń
- 30. Interfejs wiersza poleceń Statystyki Stats?
A w przypadku chcesz kiedykolwiek, aby znaleźć wspólne linie w obu plikach, można użyć 'komunikator -12 ab' – voithos
Aby utworzyć trzeci plik c należałoby użyć oczywiście' comm -3 ab> c' – 0x4a6f4672