web-dev-qa-db-fra.com

Lire les premières x lignes du fichier csv dans le nouvel outfile?

Comment copier uniquement les x premières lignes d'un fichier csv dans un nouveau fichier csv via le terminal?

21
user2896468

Bref

(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).

Exemple complet

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).

35
Felix

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
0
Paul Weber