GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacer les données entre guillemets dans un fichier ?

Je veux extraire des données entre " " à partir d'un fichier de données ayant comme délimiteur une virgule.

Exemple de fichier d'entrée :

,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10,000",8/13/2019,

O/P attendu :

,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10000",8/13/2019,

Réponse acceptée :

En supposant qu'il s'agit d'un CSV correctement formaté (les données d'exemple semblent correctes à cet égard), nous pouvons utiliser csvformat depuis csvkit pour remplacer temporairement les délimiteurs de champ par un autre caractère non présent dans les données, tel que @ , supprimez toutes les virgules et remettez à nouveau le délimiteur de champ par défaut :

$ csvformat -D '@' file.csv | tr -d , | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,

La sortie n'a pas de guillemets autour du champ que nous avons modifié, mais c'est parce qu'elle n'en a plus besoin.

Évidemment, "supprimer toutes les virgules" peut supprimer des virgules que nous ne voulons pas réellement supprimer, nous pouvons donc être un peu plus sélectifs et ne supprimer que les virgules du 7ème champ :

$ csvformat -D '@' file.csv | awk -F '@' 'BEGIN { OFS=FS } { gsub(",", "", $7); print }' | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,

Linux
  1. Protocoles de transfert de fichiers :FTP vs SFTP

  2. Comment remplacer une chaîne dans un ou plusieurs fichiers ?

  3. Remplacer la nouvelle ligne par Nul ?

  4. Créer des données de lecture de texte à partir d'un fichier ?

  5. Cacher des données dans les systèmes de fichiers ?

Récupération de données Ext4 ?

Comment partager un fichier entre Ubuntu et Windows 10 ?

Comment supprimer un fichier de données AWStats

Journalisation des données VMStat dans un fichier

Différence entre le fichier de périphérique et les pilotes de périphérique

Utilisation de sed pour remplacer entre un modèle spécifique