GNU/Linux >> Tutoriels Linux >  >> Linux

Ajouter des guillemets autour des champs dans la sortie du script AWK ?

Si vous voulez :

ajoutez ceci au script existant.

Vous pouvez insérer des \"\" supplémentaires dans chaque argument de print comme ceci :

print "\"admin\"", "\"base\"", ...

Modifié :

Oui, peut-être que définir OFS est une meilleure solution :

BEGIN { OFS="\";\""; } ... print "\"admin", ...., "simple\"";


awk '{for (i=1;i<=NF;i++) $i="\""$i"\""}1' FS=";" OFS=";" input

Pour ajouter des guillemets autour des entrées, vous pouvez utiliser une simple boucle AWK :

Script - simple_loop.awk

BEGIN {FS=";"}
{
  for(i=1;i<NF;i++){
       printf("\"%s\";", $i); 
  }
  printf("\"%s\"\n",$NF);
}

Par exemple

echo "admin;base;5.11 HOLSTER SHIRT L WHITE;;" | awk -f simple_loop.awk

Devrait sortir

"admin";"base";"5.11 HOLSTER SHIRT L WHITE";"";""

Dans ce cas, j'utiliserais un sed expression au lieu de AWK.

Si vos données se trouvent dans un fichier nommé data.txt , vous pouvez le faire écrire :

sed "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

Cela imprimera le résultat sur la sortie std, mais si vous souhaitez remplacer le contenu du fichier, utilisez simplement sed -i de cette façon :

sed -i "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

Et c'est tout !!

Explication : Le sed expression consiste en trois sed commandes séparées par ";" que vous pouvez exécuter séparément :

sed "s/;/\";\"/g

Il fait une substitution (c'est ce que signifie le premier "s"), puis le "/" (le séparateur par défaut), ";" c'est ce que nous voulons remplacer. Puis le deuxième séparateur "/", et le remplacement :\";\" C'est une séquence :guillemet échappé, un point-virgule et un guillemet échappé. Donc avec cette commande nous remplacerons les points virgules ; par ";" . Le dernier /g signifie que chaque ; sera remplacé (pas seulement le premier point virgule).

Si l'entrée était a;b;c après avoir exécuté la première commande, ce sera a";"b";"c .

Maintenant, nous devons ajouter des guillemets au début (^ dans une expression régulière) et à la fin ($ ). Voilà donc ce que cela signifie :

sed "s/^/\"/" // the first quote

Et

sed "s/$/\"/" // the last quote

Obtenir le résultat souhaité :

"a";"b";"c"

Linux
  1. Un script gawk pour convertir des guillemets intelligents

  2. Quand les guillemets doubles sont-ils nécessaires ?

  3. Comment ajouter des nouvelles lignes dans des variables dans un script bash ?

  4. Script Bash :comment affecter chaque sortie de ligne de commande à des valeurs dans un tableau ?

  5. Comment rendre ce script sed plus rapide ?

Comment ajouter une bordure autour du texte dans GIMP

Supprimer un caractère spécifique en utilisant awk ou sed

Bibliothèque de sortie de script shell coloré

Exécuter un script Python à partir de PHP

Ajouter un script bash au chemin

comment supprimer les guillemets doubles dans un csv