Muszę połączyć kilka stosunkowo dużych plików tekstowych i wolałbym to zrobić za pomocą wiersza poleceń. Niestety mam tylko Windows i nie mogę zainstalować nowego oprogramowania.
type file1.txt file2.txt > out.txt
pozwala mi prawie uzyskać to, czego chcę, ale nie chcę, aby pierwsza linia pliku2.txt była zawarta w out.txt.
Zauważyłem, że more
ma +n
opcję określenia linii startu, ale nie udało mi się ich połączyć, aby uzyskać pożądany wynik. Zdaję sobie sprawę, że może to nie być możliwe w systemie Windows i zawsze mogę ręcznie edytować plik out.txt, aby pozbyć się tego wiersza, ale czy istnieje prosty sposób na zrobienie tego z wiersza poleceń?
copy
Komenda jest znacznie szybsze, ale stawia znak SUB na końcu. Czy jest sposób, aby tego uniknąć?copy /b *.txt combined.txt
bez konieczności wyszczególniania plików indywidualnie.type file1.txt temp > out.txt
faktycznie dołączyć drugi plik, bez nagłówka do pierwszegoUżywam tego i działa dobrze dla mnie:
TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv
Oczywiście przed każdym biegiem musisz
DELETE C:\Folder\ConcatenatedFile.csv
Jedynym problemem jest to, że jeśli wszystkie pliki mają nagłówki, zostanie to powtórzone we wszystkich plikach.
źródło
Nie mam wystarczającej liczby punktów reputacji, aby skomentować zalecenie
*.csv >> ConcatenatedFile.csv
, ale mogę dodać ostrzeżenie:Jeśli utworzysz
ConcatenatedFile.csv
plik w tym samym katalogu, którego używasz do konkatenacji, zostanie on dodany do siebie.źródło
Użyj polecenia FOR, aby wywołać echo pliku wiersz po wierszu, a z opcją `` pomiń '', aby pominąć kilka linii początkowych ...
Możesz przekierować dane wyjściowe pliku wsadowego, zawierającego coś takiego jak ...
Zwróć uwagę na podwójny%, gdy zmienna FOR jest używana w pliku wsadowym.
źródło
Oto jak to zrobić:
źródło
Umieściłbym to w komentarzu do ghostdog74, z wyjątkiem tego, że moja rep jest zbyt niska, więc proszę.
more +2 file2.txt > temp
Ten kod faktycznie zignoruje wiersze 1 i 2 pliku. OP chce zachować wszystkie wiersze z pierwszego pliku (aby zachować wiersz nagłówka), a następnie wykluczyć pierwszy wiersz (prawdopodobnie ten sam wiersz nagłówka) z drugiego pliku, aby wykluczyć tylko wiersz nagłówka, którego OP powinien używać
more +1
.type temp file1.txt > out.txt
Nie jest jasne, jaka kolejność wynika z tego kodu. Jest
temp
dołączany dofile1.txt
(zgodnie z potrzebą) lub jestfile1.txt
dołączany dotemp
(niepożądane, ponieważ wiersz nagłówka zostałby umieszczony w środku pliku wynikowego).Ponadto operacje te zajmują NAPRAWDĘ DŁUGO w przypadku dużych plików (np. 300 MB)
źródło
Wiem, że powiedziałeś, że nie możesz zainstalować żadnego oprogramowania, ale nie jestem pewien, jak rygorystyczne jest to ograniczenie. W każdym razie miałem ten sam problem (próbowałem połączyć dwa pliki z przypuszczalnie tymi samymi nagłówkami) i pomyślałem, że podam alternatywną odpowiedź dla innych, którzy pojawią się na tej stronie, ponieważ zadziałało świetnie dla mnie.
Po wypróbowaniu całej masy poleceń w oknach i silnej frustracji, a także wypróbowaniu wszelkiego rodzaju edytorów graficznych, które obiecały otworzyć duże pliki, ale nie mogłem, w końcu wróciłem do moich korzeni Linuksa i otworzyłem mojego Cygwina skłonić. Dwie komendy:
W przypadku
file1.csv
800file2.csv
MB i 400 MB te dwie komendy na moim komputerze zajęły mniej niż 5 sekund. W zachęcie Cygwin, nie mniej. Myślałem, że polecenia Linuksa powinny być powolne w Cygwin, ale takie podejście wymagało znacznie mniej wysiłku i było o wiele łatwiejsze niż jakiekolwiek podejście Windows, które mogłem znaleźć.źródło
W PowerShell:
źródło
Możesz też po prostu spróbować
Doda zawartość plik2.txt na końcu plik1.txt
Jeśli potrzebujesz oryginalnego pliku file1.txt, wykonaj wcześniej kopię zapasową. Albo możesz to zrobić
Jeśli chcesz mieć podział wiersza na końcu pierwszego pliku, możesz wypróbować następujące polecenie przed dołączeniem.
źródło
Pomoc dla
copy
wyjaśnia, że symbole wieloznaczne mogą być używane do łączenia wielu plików w jeden.Na przykład, aby skopiować wszystkie pliki .txt w bieżącym folderze, które rozpoczynają się od „abc”, do jednego pliku o nazwie xyz.txt:
źródło
źródło
Odbywa się to
Test.txt
z nagłówkami oraz dołączaTest1.txt
iTest2.txt
zapisuje wyniki doTestresult.txt
pliku po usunięciu nagłówków odpowiednio z drugiego i trzeciego pliku:źródło