Wziąłem książkę z pliku tekstowego z projektu Gutenberg (około 0,5 MB), którą chcę połączyć ze sobą n
razy, aby wygenerować duży plik tekstowy, na którym mogę przetestować niektóre algorytmy. Czy istnieje komenda linux, której mogę użyć, aby to osiągnąć? cat
brzmi idealnie, ale wydaje się, że nie jest zbyt przyjemny w łączeniu pliku z samym sobą, a ponadto nie odnosi się bezpośrednio do n
części czasowej pytania.
linux
concatenation
Bryce Thomas
źródło
źródło
Odpowiedzi:
Dwie części tego, dla mnie - po pierwsze - użycie cat do wypisania pliku tekstowego na standardowe wyjście i użycie append w celu dodania go do innego pliku - np. Foo.txt >> bar.txt doda foo.txt do bar.txt
następnie uruchom go n razy za pomocą
zastępując n w tym poleceniu swoim numerem
powinien działać, gdzie n jest twoim numerem
Jeśli używasz csh, istnieje polecenie „powtórz”.
powtarzam powiązane części odpowiedzi są kopiowane stąd i przetestowałem je w systemie Ubuntu 11.04 na domyślnej powłoce bash.
źródło
{1..12}
poprawnie uruchomi ciało 12 razy.for i in {1..n};do cat foo.txt; done > bar.txt
Nudzę się, więc oto kilka innych metod łączenia pliku z samym sobą, głównie
head
za pomocą kuli. Wybacz mi, jeśli się nadmiernie tłumaczę, po prostu lubię mówić: PZakładając,
N
że liczba samopodatków, które chcesz wykonać, i że Twój plik ma nazwęfile
.Zmienne:
Biorąc pod uwagę kopię
file
wywołanegofile2
, należy podaćtotal_repeats
liczbę razyfile
,file2
aby była taka sama, jak gdybyfile
była połączona zN
czasami.Mówi się, że MATH jest tutaj mniej więcej: MATH (sedno)
To jest informatyka z pierwszego semestru, ale minęło trochę czasu, odkąd zrobiłem dowód indukcyjny, więc nie mogę się z tym pogodzić ... (również ta klasa rekurencji jest dość dobrze znana,
2^Loops
więc też ...)POSIX
Używam kilku rzeczy, które nie są posiksowane, ale nie są one niezbędne. Do moich celów:
Och, użyłem tylko tego. No cóż, sekcja jest już tutaj ...
Metody
head
ze śledzeniem liczby linii.Bez pliku tymczasowego, bez kota, jeszcze za dużo matematyki, cała radość.
tee
z MATHTutaj
tee
jest czytanie zefile
lecz wiecznie dołączając do niego, więc będzie zachować czytania pliku na powtórzeniu ażhead
zatrzymuje ją. I wiemy, kiedy to przerwać z powodu MATH . Dołączanie przesadza, więc użyłem pliku tymczasowego. Możesz również przyciąć nadmiar liniifile
.eval
władca ciemności!To po prostu rozszerza się
cat file file file ...
i ewaluuje. Możesz to zrobić również bez$tmp
pliku:Drugie
head
„triki”cat
polegające na umieszczeniu pośrednika między operacją a operacją zapisu. Możesz też oszukaćcat
z innym,cat
ale to ma niespójne zachowanie. Spróbuj tego:sed
:Zmusza
sed
do odczytania całego pliku jako linii, przechwytuje go, a następnie wkleja$total_repeats
wiele razy.Nie powiedzie się to oczywiście, jeśli w pliku są znaki o wartości NULL. Wybierz taki, o którym wiesz, że go nie ma.
To wszystko na razie chłopaki, mam nadzieję, że ta arbitralna odpowiedź nikomu nie przeszkadzała. Testowałem je wszystkie wiele razy, ale jestem tylko dwuletnim użytkownikiem powłoki, więc myślę, że o tym myślę. Teraz spać ...
rm $tmp
źródło
Z pewnością możesz użyć
cat
do tego:Aby uzyskać
$n
kopie, możesz użyćyes
potoku dohead -n $n
:Złożenie tego razem daje
źródło