Biorąc pod uwagę dwa pliki, chcę napisać skrypt powłoki, który odczytuje każdy wiersz z pliku 1 i sprawdza, czy jest on w pliku 2. Jeśli wiersz nie zostanie znaleziony, powinien wypisać dwa pliki są różne i wyjść. Pliki mogą zawierać słowa liczb lub cokolwiek innego. Na przykład :
plik1:
Hi!
1234
5678
1111
hello
plik2:
1111
5678
1234
Hi!
hello
W takim przypadku dwa pliki powinny być równe. jeśli plik2 ma „cześć !!!” zamiast „cześć”, pliki są inne. Używam skryptu bash. W jaki sposób mogę to zrobić. Nie jest ważne, że muszę to robić w zagnieżdżonej pętli, ale tak myślałem, że to jedyny sposób. Dzięki za pomoc.
sort
nie dba o dokładną treść, chyba że tak mówisz.--brief
i dodaj opcje formatu, np-u
.diff
ustawia status wyjścia, aby wskazać, czy pliki są takie same, czy nie. Status wyjścia jest dostępny w specjalnej zmiennej$?
. Możesz rozwinąć odpowiedź Ignacio w ten sposób:źródło
if diff ... >/dev/null
bez nawiasów i zmiennej.Dodając to, ponieważ myślę, że [[]] && || konstrukcja jest dość schludna:
źródło
Powinien również działać:
Myślę, że to wystarczająca liczba postaci do odpowiedzi ...
źródło
Chociaż
diff
jest to bardzo dobra odpowiedź, prawdopodobnie użyłbymcmp
zamiast tego, który jest specjalnie do porównania bajt po bajcie dwóch plików.https://linux.die.net/man/1/cmp
Z tego powodu ma dodatkową zaletę polegającą na porównywaniu plików binarnych.
Jestem przekonany, że jest szybszy niż używanie,
diff
chociaż osobiście tego nie testowałem.źródło