linux - Come dividere i file CSV in base al numero di righe specificato?




split in linux (3)

Ho un file CSV (circa 10.000 righe, ogni riga con 300 colonne) memorizzato sul server LINUX. Voglio rompere questo file CSV in 500 file CSV di 20 record ciascuno. (Ciascuno ha la stessa intestazione CSV presente nel CSV originale)

C'è qualche comando linux per aiutare questa conversione?


Questo dovrebbe farlo per te - tutti i tuoi file finiranno per chiamarsi Part1-Part500.

#!/bin/bash
FILENAME=10000.csv
HDR=$(head -1 $FILENAME)   # Pick up CSV header line to apply to each file
split -l 20 $FILENAME xyz  # Split the file into chunks of 20 lines each
n=1
for f in xyz*              # Go through all newly created chunks
do
   echo $HDR > Part${n}    # Write out header to new file called "Part(n)"
   cat $f >> Part${n}      # Add in the 20 lines from the "split" command
   rm $f                   # Remove temporary file
   ((n++))                 # Increment name of output part
done

Questo dovrebbe funzionare !!!

file_name = Nome del file che si desidera dividere.
10000 = Numero di righe che ogni file diviso conterrebbe
file_part_ = Prefisso del nome del file diviso (file_part_0, file_part_1, file_part_2..etc continua)

split -d -l 10000 nome_file.csv file_part_


Usa il comando split di Linux:

split -l 20 file.txt new    

Dividere il file "file.txt" in file che iniziano con il nome "nuovo" ciascuno contenente 20 righe di testo ciascuna.

Digitare man split al prompt di Unix per ulteriori informazioni. Tuttavia dovrai prima rimuovere l'intestazione da file.txt (usando il comando tail , ad esempio) e quindi aggiungerla nuovamente a ciascuno dei file divisi.





split