Polecenie fc systemu Windows 10: Porównanie plików oddzielonych przecinkami

1

Mam dwa pliki po 3 GB każdy, aby wykonać porównanie i zapisać dane różnicowe w trzecim pliku.

Poniżej podano przykładowe dane.

Plik 1 : June_01_2018.csv

wprowadź opis zdjęcia tutaj

Plik 2 : June_02_2018.csv

wprowadź opis zdjęcia tutaj

Uwaga : chcę zapisać różnicę w trzecim pliku z nagłówkami kolumn.

Oczekiwany wynik : Trzeci plik powinien zawierać rekordy od ID11 do 15 z nagłówkami kolumn.

Moja próba : fcpolecenie w wierszu polecenia,

>fc June_01_2018.csv June_02_2018.csv > June_Diff.csv

Ale uzyskanie nieoczekiwanego rezultatu:

wprowadź opis zdjęcia tutaj

MAK
źródło
1
Powiązane: Jak porównać dwa pliki csv w systemie Windows . fcjest interaktywnym narzędziem wiersza poleceń, tzn. zawsze generuje dane czytelne dla człowieka. Dodatkowo porównuje pliki tekstowe linia po linii i nie wie o znaczeniu linii. W twoim przypadku pierwszy wiersz zawierający nagłówki kolumn jest identyczny w obu plikach, więc nie jest drukowany. Jeśli czytasz dokumenty , zobaczysz, że twój wynik jest oczekiwanym rezultatem. Wątpię, czy fcjest właściwym narzędziem do tego zadania.
danzel

Odpowiedzi:

1

Nadzieje nie mają nic wspólnego z (realistycznymi) oczekiwaniami.

Nagłówek jest dokładnie taki sam, więc nigdy nie może być różnicy.
Również reprezentacja programu Excel nie jest plikiem csv, powinieneś opublikować oryginalne pliki jako tekst.

Następujący plik wsadowy czyta w nagłówku i powtarza echo do pliku różnicowego.
Zamiast fc używa findstr z opcjami

/B compare from line begin
/E compare upto line end
/V output lines **not** present in compared file
/G: get strings from a file

@Echo off
Set "File1=June_01_2018.csv"
Set "File2=June_02_2018.csv"
Set "File3=June_Diff.csv"

Set /P "Header="<"%File1%"
( Echo=%Header%
  Findstr.exe /BEV /G:"%File2%" "%File1%"
)>"%File3%"

Wariant z fc

@Echo off
Set "File1=June_01_2018.csv"
Set "File2=June_02_2018.csv"
Set "File3=June_Diff.csv"

Set /P "Header="<"%File1%"
( Echo=%Header%
  fc "%File1%" "%File2%"|more +3 
)>"%File3%"

To pozostawia tylko linię końcową.

LotPings
źródło
Otrzymuję błąd FINDSTR: Search string too long.
MAK
Z jakimi rozmiarami plików masz do czynienia?
LotPings
Plik ma 3 GB każdy.
MAK
Cóż, to zdecydowanie przekracza limity findstr. Możesz użyć metody Header, dołączyć wariant fc i dostosować dane wyjściowe, usuwając niechciane linie zaczynające się od comparingi*****
LotPings
Próbowałem z poleceniem fc z twoim kodem. Wystąpił błąd RESYNC NIE POWIODŁO SIĘ. Aby temu zaradzić, właśnie dodałem / Lb 200000 do fc, ponieważ różnica między dwoma plikami zawiera około 1 miliona więcej lub mniej rekordów. Skrypt nadal działa od ostatnich 15 min.
MAK