Mam plik CSV (około 10000 wierszy; każdy wiersz ma 300 kolumn) przechowywany na serwerze LINUX. Chcę podzielić ten plik CSV na 500 plików CSV po 20 rekordów każdy. (Każdy ma taki sam nagłówek CSV, jak obecny w oryginalnym CSV)
Czy jest jakieś polecenie Linuksa, które pomoże w tej konwersji?
Odpowiedzi:
Uczynił to funkcją. Możesz teraz zadzwonić
splitCsv <Filename> [chunkSize]
Znalezione na: http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
źródło
split
, który dzieli się na nowe pliki co 20 linii, z prefiksemsplit_
2: iteruj przez nowe pliki split_ *, zapisując każdą nazwę do zmiennejfile
, pojedynczo 3: dla każdego ... 4: zapisz pierwszą linię (nagłówki kolumn) z naszego oryginalnego pliku dotmp_file
5:tmp_file
dołącz plik podzielony na 20 linii do 6: nadpisz stary plik split_ * nowymtmp_file
, aby zachować nagłówki kolumnecho -e "$HEADER\n$(cat $i)" > $i
jest niepotrzebnie niepotrzebne. Zastąpiłem gosed -i -e "1i$HEADER" "$i"
.Użyj polecenia podziału systemu Linux:
Podziel plik „plik.txt” na pliki zaczynające się od nazwy „nowy”, każdy zawierający 20 linii tekstu.
Wpisz
man split
po znaku zachęty Unix, aby uzyskać więcej informacji. Będziesz jednak musiał najpierw usunąć nagłówek z pliku.txt (używająctail
na przykład polecenia), a następnie dodać go z powrotem do każdego z podzielonych plików.źródło
wc -l
aby uzyskać liczbę wierszy, a następnie weź tę wartość odejmij 1 (załóżmy, żewc -l
dało to 50), a następnie uruchomtail -n 49
(w tym przykładzie), aby uzyskać wszystko oprócz wiersza nagłówka. Zwróć uwagę, żewc -l
liczy znaki <newline>, więc jeśli ostatnia linia nie kończy się znakiem nowej linii, liczba linii zostanie zmniejszona o 1.tail -n +2
wypisze wszystkie wiersze oprócz pierwszej.--additional-suffix=.csv
To powinno działać !!!
file_name
= Nazwa pliku, który chcesz podzielić.10000
= Liczba wierszy, które każdy podzielony plik będzie zawierałfile_part_
= Prefiks nazwy podzielonego pliku (file_part_0, file_part_1, file_part_2..etc tak dalej)źródło
head -200000 file.csv | split -l 10000 - new_
To powinno zrobić to za Ciebie - wszystkie Twoje pliki zostaną nazwane Part1-Part500.
źródło
Mam jednowierszową odpowiedź (ten przykład daje 999 wierszy danych i jeden wiersz nagłówka na plik)
https://stackoverflow.com/a/53062251/401226
źródło