Mam kilka zrzutów SQL, na które patrzę różnice. diff
mogę oczywiście pokazać różnicę między dwiema liniami, ale doprowadzam się do szału, próbując znaleźć, które wartości z długiej listy wartości oddzielonych przecinkami są tymi, które powodują różne linie.
Jakiego narzędzia mogę użyć, aby wskazać dokładne różnice znaków między dwiema liniami w niektórych plikach?
command-line
diff
użytkownik394
źródło
źródło
Odpowiedzi:
Jest wdiff , do tego słowo-diff.
Na pulpicie meld może dla Ciebie wyróżnić różnice w linii.
źródło
wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" file1 file2
wdiff a b | colordiff
dwdiff
narzędzie, które jest w większości kompatybilne,wdiff
ale obsługuje także kolorowe wydruki i prawdopodobnie niektóre inne funkcje. I jest bardziej dostępny w niektórych dystrybucjach Linuksa, takich jak Arch.wdiff -n a b | colordiff
, radziman colordiff
.Po prostu inna metoda wykorzystująca git-diff:
grep -v, jeśli nie jest zainteresowany pozycjami różnic.
źródło
Użyłem
vimdiff
do tego.Oto zrzut ekranu (nie mój) pokazujący niewielką różnicę między jedną lub dwiema postaciami, która dość dobrze się wyróżnia. Szybki poradnik zbyt .
źródło
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' a b
, sugeruje stackoverflow.com/a/45333535/2097284 .Oto metoda „... włosa psa, który cię ugryzł” ...
diff
doprowadził cię do tego punktu; użyj go, aby przejść dalej ...Oto wynik użycia par próbnych linii ...
☻
oznacza TABOto skrypt .. Po prostu musisz jakoś wyłapać pary linii .. (Dzisiaj użyłem diff tylko raz (dwa razy?), Więc nie znam jego wielu opcji i sortuję opcje dla tego scenariusz był dla mnie wystarczający na jeden dzień :) .. Myślę, że musi być dość prosty, ale mam przerwę na kawę ....
źródło
wdiff
jest tak naprawdę bardzo starą metodą porównywania plików słowo po słowie. Działało to poprzezdiff
ponowne formatowanie plików, a następnie wykorzystywanie do znajdowania różnic i przekazywanie ich ponownie. Sam zasugerowałem dodanie kontekstu, aby zamiast porównywać słowo po słowie, robi to z każdym słowem otoczonym innymi słowami „kontekstowymi”. To pozwala diffowi zsynchronizować się znacznie częściej na wspólnych przejściach w plikach, szczególnie gdy pliki są w większości różne i mają tylko kilka bloków wspólnych słów. Na przykład podczas porównywania tekstu pod kątem plagiatu lub ponownego użycia.dwdiff
został później utworzony zwdiff
. Aledwdiff
używa tej funkcji formatowania tekstu z dobrym skutkiemdwfilter
. To świetny rozwój - oznacza, że możesz sformatować jeden tekst, aby dopasować go do drugiego, a następnie porównać go za pomocą dowolnego graficznego wyświetlacza różnicowego linia po linii. Na przykład użycie go z „rozproszonym” graficznym diff ....To zmienia
file1
format na formatfile2
i daje to dodiffuse
wizualnego porównania.file2
jest niezmodyfikowany, więc możesz edytować i łączyć różnice między nimi bezpośrednio wdiffuse
. Jeśli chcesz edytowaćfile1
, możesz dodać-r
do tyłu, który plik jest sformatowany. Spróbuj, a przekonasz się, że jest niezwykle potężny!Preferuję graficzną różnicę (pokazaną powyżej),
diffuse
ponieważ wydaje się ona znacznie czystsza i bardziej użyteczna. Jest to także samodzielny program w języku Python, co oznacza, że jest łatwy w instalacji i dystrybucji do innych systemów UNIX.Inne różnice graficzne wydają się mieć wiele zależności, ale można ich również użyć (do wyboru). Należą do nich
kdiff3
lubxxdiff
.źródło
Korzystając z rozwiązania @ Peter.O jako podstawy, przepisałem go, aby wprowadzić szereg zmian.
./hairOfTheDiff.sh file1.txt file2.txt
demo
źródło; może to otworzyć drzwi do fantazyjnych potoków, aby nie potrzebować plików dla dwóch osobnych danych wejściowych, przy użyciupaste
wielu deskryptorów plików.Brak wyróżnienia oznacza, że znak był w obu liniach, wyróżnienie oznacza, że było w pierwszym, a czerwone oznacza, że było w drugim.
Kolory można zmieniać za pomocą zmiennych u góry skryptu, a nawet można całkowicie zrezygnować z kolorów, używając zwykłych znaków do wyrażania różnic.
źródło
Oto prosty jednowarstwowy:
diff -y <(cat a.txt | sed -e 's/,/\n/g') <(cat b.txt | sed -e 's/,/\n/g')
Chodzi o to, aby zastąpić przecinki (lub dowolny separator, którego chcesz użyć) znakami nowej linii
sed
.diff
następnie zajmuje się resztą.źródło
.csv
łatwo jest utworzyć arkusz kalkulacyjny , a formułę(A7==K7) ? "" : "diff"
lub podobny element wstawić i skopiować i wkleić.źródło
W wierszu poleceń upewnię się, że dodam rozsądne nowe wiersze przed porównaniem plików. Możesz użyć sed, awk, perl lub cokolwiek innego, aby dodać podział linii w jakiś systematyczny sposób - pamiętaj jednak, aby nie dodawać zbyt wielu.
Ale uważam, że najlepiej jest używać vim, ponieważ podkreśla różnice słów. vim jest dobry, jeśli nie ma zbyt wielu różnic, a różnice są proste.
źródło
kdiff3 staje się standardową przeglądarką różnic GUI w systemie Linux. Jest podobny do xxdiff , ale myślę, że kdiff3 jest lepszy. Robi wiele rzeczy dobrze, w tym prośbę o pokazanie „dokładnych różnic znaków między dwiema liniami w niektórych plikach”.
źródło
Jeśli poprawnie czytam twoje pytanie, używam
diff -y
do tego rodzaju rzeczy.To sprawia, że porównywanie obok siebie jest znacznie łatwiejsze do znalezienia, które linie rzucają różnice.
źródło
Miałem ten sam problem i rozwiązałem go za pomocą PHP Fine Diff , narzędzia online, które pozwala określić szczegółowość. Wiem, że technicznie nie jest to narzędzie * nix, ale tak naprawdę nie chciałem pobierać programu tylko po to, aby zrobić jednorazową różnicę poziomów postaci.
źródło