-1
votes

Comment puis-je supprimer des virgules uniquement des citations doubles intérieures pour chaque ligne d'une CSV délimitée par des virgules?

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"


0 commentaires

4 Réponses :


1
votes

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>

  • 0 commentaires

    2
    votes

    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: xxx

    EDIT:

    Ajouté * quantifier pour correspondre aux virgules suivantes.


    0 commentaires

    0
    votes

    avec gnu awk et FPAT < / code> : xxx


    0 commentaires

    0
    votes

    J'aime Ruby pour CSV One-Linders:

    ruby -rcsv -ne '
      CSV.parse($_) {|row|
        puts row.map {|field| field.delete(",")}
                .to_csv(:force_quotes => true)
      }
    '
    


    0 commentaires