J'ai un fichier CSV délimité par des virgules qui encapsule les champs en double citation que je tente de fonctionner à bash. Je voudrais éliminer les virgules de l'intérieur du double champ cité pour chaque ligne. J'ai examiné d'autres solutions pour la question posée ici, et ils ont tourné autour d'utiliser des bibliothèques externes pour analyse de la CSV, ce qui n'est pas une option pour mon environnement limité dans lequel la majorité des travaux sont effectués dans AWK et SED.
"A","B","C D","E F","G"
4 Réponses :
facile avec Perl's Texte :: CSV_XS module:
perl -MText::CSV_XS=csv -we 'csv( in => shift, always_quote => 1, on_in => sub { tr/,//d for @{ $_[1] } } );' -- file.csv
dans code> spécifie l'entrée, shift prend simplement une des arguments de la ligne de commande li>
toujours_quote code> ajoute des citations même aux champs qui n'en ont pas besoin li>
on_in code> introduit le code à exécuter sur chaque ligne, dans ce cas, il itière sur toutes les cellules de la ligne et supprime les virgules à l'aide de l'opérateur de translittération tr code>. li>
ul> p>
avec SED, pour éliminer toutes les virgules suivies d'un caractère non de devis et de virgules non précédées d'un caractère non de devis: EDIT: strong> P> Ajouté * code> quantifier pour correspondre aux virgules suivantes. P> p>
J'aime Ruby pour CSV One-Linders:
ruby -rcsv -ne ' CSV.parse($_) {|row| puts row.map {|field| field.delete(",")} .to_csv(:force_quotes => true) } '