Je travaille avec des fichiers CSV et ai parfois besoin de vérifier rapidement le contenu d'une ligne ou d'une colonne à partir de la ligne de commande. Dans de nombreux cas cut
, head
, tail
et amis feront le travail; Cependant, couper ne peut pas facilement traiter avec des situations telles que
"this, is the first entry", this is the second, 34.5
Ici, la première virgule fait partie du premier champ, mais en cut -d, -f1
désaccord. Avant d’écrire moi-même une solution, je me demandais si quelqu'un connaissait un bon outil qui existe déjà pour ce travail. Il devrait au moins pouvoir gérer l'exemple ci-dessus et renvoyer une colonne à partir d'un fichier au format CSV. D'autres fonctionnalités souhaitables incluent la possibilité de sélectionner des colonnes en fonction des noms de colonne donnés dans la première ligne, la prise en charge d'autres styles de citation et la prise en charge de fichiers séparés par des tabulations.
Si vous ne connaissez pas un tel outil, mais avez des suggestions concernant la mise en œuvre d'un tel programme en Bash, Perl ou Python, ou dans d'autres langages de script courants, ces suggestions ne me dérangeraient pas.
la source
Je suis probablement un peu trop tard, mais il existe un autre outil qui mérite d'être mentionné: csvkit
http://csvkit.readthedocs.org/
Il a beaucoup d'outils en ligne de commande qui peuvent:
cut
,grep
,sort
et d' autres, mais CSV-conscient,la source
Cela ressemble à un travail pour Perl avec
Text::CSV
.Voir la documentation pour savoir comment gérer les noms de colonnes. Le séparateur et le style de citation peuvent être ajustés avec les paramètres
new
. Voir aussiText::CSV::Separator
pour deviner séparateur.la source
(t)csh
cette commande, cette commande fonctionnerait parfaitement à l'invite de votre shell. Vous pouvez toujours joindre ces lignes si vous le souhaitez sur une seule ligne. newline est généralement identique à l'espace dans la syntaxe perl, comme en C.-e
créer une boucle implicite).J'ai trouvé csvfix, un outil de ligne de commande fait bien son travail. Vous devrez toutefois le faire vous-même:
http://neilb.bitbucket.org/csvfix
Il fait tout ce que vous attendez, ordre / sélection des colonnes, scission / fusion et beaucoup de choses que vous ne voudriez pas générer d'insertions SQL à partir de données CSV et de données CSV différentes.
la source
Si vous souhaitez utiliser la ligne de commande (et ne créez pas un programme complet pour faire le travail), vous souhaitez utiliser des lignes , un projet sur lequel je travaille: c'est une interface de ligne de commande pour les données tabulaires, mais aussi une bibliothèque Python à utiliser dans vos programmes. Avec l’interface de ligne de commande, vous pouvez imprimer toutes les données au format CSV, XLS, XLSX, HTML ou n’importe quel autre format tabulaire pris en charge par la bibliothèque à l’aide d’une simple commande:
Si
myfile.csv
est comme ça:Ensuite, les lignes imprimeront le contenu de manière magnifique, comme ceci:
L'installation
Si vous êtes un développeur Python et que vous êtes déjà
pip
installé sur votre ordinateur, exécutez-le simplement dans virtualenv ou avecsudo
:Si vous utilisez Debian:
Autres fonctionnalités intéressantes
Conversion de formats
Vous pouvez convertir n'importe quel format pris en charge:
Interrogation
Oui, vous pouvez utiliser SQL dans un fichier CSV:
La conversion de la sortie de la requête en fichier au lieu de stdout est également possible à l'aide du
--output
paramètre.En tant que bibliothèque Python
Vous pouvez également utiliser vos programmes Python:
Je espère que vous l'apprécierez!
la source
R n’est pas mon langage de programmation préféré, mais c’est bon pour des choses comme celle-là. Si votre fichier csv est
À l'intérieur du type d'interprète R
En ce qui concerne vos autres demandes, pour "la possibilité de sélectionner des colonnes en fonction des noms de colonne indiqués dans la première ligne", voir
Pour "prise en charge d'autres styles de citation", voir l'
quote
argument de read.csv (et les fonctions associées). Pour "prise en charge des fichiers séparés par des tabulations", voir l'sep
argument de read.csv (définisep
sur '\ t').Pour plus d'informations, consultez l'aide en ligne.
la source
Rscript
(partie de la distribution de base R) ou le paquet addonlittler
. Vous pouvez faire#!/usr/bin/env Rscript
ou similaire.J'ai utilisé csvtool une fois et cela m'a fait gagner beaucoup de temps et de problèmes. Callable depuis le shell.
http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=447
la source
Miller est un autre outil intéressant pour manipuler des données nominatives, y compris CSV (avec en-têtes). Pour extraire la première colonne d’un fichier CSV, sans vous soucier de son nom, vous feriez quelque chose comme:
la source
awk
, mais très sensible à DSV.Ou, vous pouvez essayer un peu de magie awk . Cependant, je ne suis pas un bon utilisateur awk et je ne peux pas confirmer que cela fonctionnerait correctement et comment le faire.
la source
Consultez également GNU Recutils et les outils de compression .
(via http://www.reddit.com/r/commandline/comments/mfcu9/anyone_using_gnu_recutils_is_it_outdatedsuperceded/ )
la source
Pour utiliser python à partir de la ligne de commande, vous pouvez consulter pythonpy ( https://github.com/Russell91/pythonpy ):
la source
essayez "csvtool" ce paquet, c'est un outil pratique en ligne de commande pour gérer les fichiers CSV
la source
Cissy fera également le traitement CSV en ligne de commande. Il est écrit en C (petit / léger) avec les paquets rpm et deb disponibles pour la plupart des distributions.
En utilisant l'exemple:
ou
ou
la source
Il existe également une bibliothèque Curry pour lire / écrire des fichiers au format CSV : CSV .
la source
Le github repo Structured Text Tools contient une liste utile d’outils de ligne de commande linux pertinents. En particulier, la section Valeurs séparées du délimiteur répertorie plusieurs outils compatibles CSV qui prennent directement en charge les opérations demandées.
la source
Je recommande xsv - une boîte à outils rapide en ligne de commande CSV, écrite en rouille ( Github ).
Écrit par l' auteur de Ripgrep .
En vedette dans Comment nous avons rendu notre traitement CSV 142 fois plus rapide ( fil Reddit ).
la source
Miller ( http://johnkerl.org/miller/doc/index.html ) est l'un des meilleurs outils . Cela ressemble à awk, sed, couper, joindre et trier des données indexées telles que CSV, TSV et JSON tabulaire.
Par exemple
vous donne
Si vous voulez un TSV
vous donne (il est possible de supprimer l'en-tête)
Si vous voulez la première et la troisième colonne, changer leur ordre
vous donne
la source
Si vous voulez un outil visuel / interactif dans le terminal, je recommande vivement VisiData.
Il contient des tableaux de fréquences (voir ci-dessus), des tableaux de points de fusion, des diagrammes de dispersion, des filtres / calculs utilisant Python, etc.
Vous pouvez transmettre des fichiers CSV comme si
vd hello.csv
Il y a des options spécifiques csv:
--csv-dialect
,--csv-delimiter
,--csv-quotechar
et--csv-skipinitialspace
pour l' écoute fine gestion des fichiers csv.la source
Une solution awk
la source