Avoir un fichier du contenu suivant:
1111,2222,3333,4444
aaaa,bbbb,cccc,dddd
Je cherche à obtenir un fichier égal à l'original, mais il manque une nième colonne comme, pour n = 2 (ou peut-être 3)
1111,2222,4444
aaaa,bbbb,dddd
ou, pour n = 0 (ou peut-il être 1)
2222,3333,4444
bbbb,cccc,dddd
Un fichier réel peut prendre plusieurs gigaoctets et compter des dizaines de milliers de colonnes.
Comme toujours dans de tels cas, je pense que les magiciens en ligne de commande peuvent offrir une solution élégante ... :-)
Dans mon cas réel, j'ai besoin de supprimer 2 premières colonnes, ce qui peut être fait en supprimant une première colonne deux fois dans une séquence, mais je suppose qu'il serait plus intéressant de généraliser un peu.
text-processing
Ivan
la source
la source
,
? (C'est-à-dire,
que l'on n'utilise jamais que des séparateurs de champs.),
et il ne se produit jamais dans un champ.Réponses:
Je pense que ceci est spécifique à couper des coreutils GNU:
Normalement, vous spécifiez les champs souhaités via -f, mais en ajoutant - Complément, vous inversez naturellement le sens. De 'homme coupé':
Une mise en garde: si l’une des colonnes contient une virgule, elle sera coupée, parce que couper n’est pas un analyseur CSV de la même manière qu’un tableur. De nombreux analyseurs ont des idées différentes sur la façon de gérer les virgules dans CSV. Pour le cas simple d'un fichier CSV, en ligne de commande, couper est toujours le chemin à parcourir.
la source
cut
s’envolera car ce n’est pas un analyseur CSV. Si un champ CSV a un séparateur de champ dans sa valeur, il est entouré de guillemets. Btw, au sujet decut
,-f
prend des champs.cut -f, -d3-
affichera le troisième champ en supprimant les deux premiers.cut -d, -f3-
Si les données sont simplement constituées de colonnes séparées par des virgules:
Vous pouvez aussi utiliser awk, mais c'est un peu gênant, car effacer un champ est facile, enlever le séparateur demande du travail. Si vous n'avez pas de champ vide, c'est pas trop grave:
Si vous avez un fichier CSV réel, où des virgules peuvent apparaître à l'intérieur de champs s'il est correctement cité, vous avez besoin d'une vraie bibliothèque CSV .
la source