Comment copier uniquement les x premières lignes d'un fichier csv
dans un nouveau fichier csv
via le terminal?
(Vous utiliserez un terminal/une console linux)
Utilisez head -n NUMBEROFLINES file.csv
pour obtenir la première NUMBEROFLINES
de lignes. Ecrivez-le dans un autre fichier en utilisant la redirection du shell (>
) comme ceci:
head -n NUMBEROFLINES file.csv > mynewfile.csv
Notez que ceci va totalement recréer mynewfile.csv
, s'il y avait du contenu avant qu'il ne soit maintenant supprimé pour toujours (- ish).
S'il vous arrive de vouloir l'inverse ( dernier x lignes), utilisez tail
.
Les deux outils sont livrés avec des pages man et info (man head
ou info head
- s’habituent à man
, cependant) et à un indicateur --help
(head --help
m’a en fait montré plus ou moins la page de manuel).
head -n 10 data.csv >> /tmp/first_and_last.csv # Note the ">>"
tail -n 10 data.csv >> /tmp/first_and_last.csv # Note the ">>"
Cela ouvrirait le fichier /tmp/first_and_last.csv
et attacherait (>>
, >
recréer/supprimer le fichier!) À la première et aux 10 dernières lignes de data.csv
à la fin du /tmp/first_and_last.csv
.
Mac OS: Selon Internet (tm), ces commandes sont également disponibles sous Mac OS (basé sur Unix) (vous devez démarrer le terminal via le Finder).
Cela pourrait ne pas fonctionner pour vous si votre CSV contient des "lignes" contenant des séparateurs de nouvelle ligne, par exemple. dans les citations. Un court script PHP qui résoudrait ce problème. Vous obtiendrez ainsi 1 500 "lignes"/"ensembles de données", chacun contenant éventuellement plusieurs "lignes de fichier".
<?php
$input = fopen($argv[1], "r");
$output = fopen($argv[2], "w+");
$limit = $argv[3];
$counter = 0;
while($counter <= $limit) {
echo $counter;
$line = fgetcsv($input);
fputcsv($output, $line);
$counter++;
}
Éxécuter:
php -f scriptname.php input.csv output.csv 1500