2011-12-02 19 views
13

Używam diff z opcjami -y i --suppress-common-lines, a wynik jest niemal idealny, ale chciałbym zobaczyć numery linii zmian.Czy można wyświetlać numer wiersza na wyjściu różnicowym obok siebie?

Przykład:

plik1:

line a 
line b 
line c 

plik2:

line a 
line B 
line c 
line d 

polecenia i wyjście:

$ diff -y --suppress-common-lines file1 file2 
line b              | line B 
                   > line d 

Jest to połączenie wariantów możliwych z diff czy ja z domu d inne narzędzie?

Odpowiedz

9

Niestety opcja -y wykorzystuje styl formatowania wewnętrznie (podobnie jak --LFMT-line-format), nie można kumulować poleceń formatowania za pomocą -y. Nie można uzyskać z parametrów formatowania, co robi -y, więc nie można obejść bezpośrednio z diff (sprawdziłem kod źródłowy diff 3.2).

Musisz użyć innego narzędzia.

+0

Byłem tego całkiem pewien, ale dziękuję za potwierdzenie! Teraz, aby znaleźć inne narzędzie ... –

0

Jeśli zawsze porównując linie z tymi samymi numerami linii, można użyć coś takiego:

$ awk 'NR==FNR{a[NR]=$0;next}{x=a[FNR];if($0!=x)printf("%s;%s;%s\n",FNR,x,$0)}' file1 file2 
327;有る;ある 
431;先ず;まず 
543;連れて行く;連れていく 
719;幾ら;いくら 
1318;込む;混む 
1415;かわいそう;可哀相 
1713;だんだん;段々 
2491;大みそか;大晦日 
4120;もうける;儲ける 
4510;ほほ笑む;微笑む 
4512;もうかる;儲かる 
5727;剥げる;剝げる 

FNR (numer akt rekordu) jest równa NR gdy awk przetwarza pierwszy plik. Instrukcja next przechodzi do następnego rekordu.