to robhruska za skrypt oczyścić kawałek:
tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat $file >> tmp_file
mv -f tmp_file $file
done
usunąłem wc
, cut
ls
i echo
, w miejscach, gdzie przebywa niepotrzebne. Zmieniłem niektóre nazwy plików, aby były trochę bardziej znaczące. Zerwałem go na wiele linii tylko po to, aby ułatwić czytanie.
Jeśli chcesz mieć ochotę, możesz użyć mktemp
lub tempfile
, aby utworzyć tymczasową nazwę pliku zamiast używać twardego.
Edit
Korzystanie GNU split
to możliwe, aby to zrobić:
split_filter() { { head -n 1 file.txt; cat; } > "$FILE"; }; export -f split_filter; tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
wybuchł dla czytelności:
split_filter() { { head -n 1 file.txt; cat; } > "$FILE"; }
export -f split_filter
tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
Kiedy --filter
jest określony, split
uruchamia komendę (a funkcja w tym przypadku, która musi zostać wyeksportowana) dla każdego pliku wyjściowego i ustawia v ariable FILE
, w środowisku polecenia, do pliku.
Skrypt lub funkcja filtrująca może wykonać dowolną manipulację, którą chce, na zawartość wynikową, a nawet na nazwę pliku. Przykładem tego ostatniego może być na przykład wyprowadzenie do stałej nazwy pliku w katalogu zmiennych: > "$FILE/data.dat"
.
Wydaje się logiczne, że ktoś powinien dodać, że jako wbudowaną cechą 'split' , prawda? –
Prawdopodobnie największym czynnikiem * na * stanie się wbudowanym jest to, że generalnie zrekonstruujesz podzielony plik, wykonując 'cat a b c> rekonstruowany'. Zewnętrzne linie w pliku oznaczają, że normalna metoda rekonstrukcji nie odtwarza oryginalnego pliku. –
To jest właśnie to, do czego służy nadchodzące narzędzie (* not *) "unsplit --remove-header"! Ale poważnie, "split", jeśli miałby opcję "powtórzyć nagłówek", powinien nadal domyślnie działać. Używałbyś tylko nagłówków, jeśli naprawdę tego chciałeś. –