Je demande une liste d'instantanés ec2 via l'outil de ligne de commande ec2 d'Amazon:
ec2-describe-snapshots -H --hide-tags > snapshots.csv
Les données ressemblent à ceci:
SnapshotId VolumeId StartTime OwnerId VolumeSize Description
snap-00b66464 vol-b99a38d0 2012-01-05 5098939 160 my backup
Comment puis-je intercepter les données avant de les rediriger snapshots.csv
et effectuer les opérations suivantes:
- remplacer "tabulations" par des virgules
- encapsuler les valeurs avec des citations
- si une valeur est composée de nombres, préfixez-la avec un
=
afin qu'Excel la traite comme du texte - par exemple, elleOwnerId
devrait être"=5098939
"(celle-ci n'est pas nécessaire si elle ne peut pas être effectuée en ligne et nécessiterait plutôt un fichier de script ou une fonction)
Sortie désirée:
"SnapshotId","VolumeId","StartTime","OwnerId","VolumeSize","Description"
"snap-00b66464","vol-b99a38d0","2012-01-05","=5098939","=160","my backup"
Réponses:
En supposant que
convert.awk
vous l'appelez, vous pouvez soit appeler avecou (après l'ajout des autorisations d'exécution,
chmod a+x convert.awk
)Cela créera une nouvelle colonne pour chaque onglet, qui gardera la colonne de commentaire ensemble (à moins qu'elle ne contienne des onglets), mais ajoutera des colonnes vides (bien que c'est à quoi ressemble votre exemple de sortie, alors peut-être que vous le voulez vraiment). Si vous souhaitez diviser tous les espaces (cela réduira les onglets supplémentaires dans le tableau mais placera chaque mot dans la description comme une nouvelle colonne), retirez l'
FS="\t";
instruction.Pour les générations futures, si vous n'avez pas besoin du
"
s ou du=
s ou du blanc intégré, vous pouvez en faire une ligne unique:la source
./convert.sh
, chmod + x, puis je dirige l'entrée vers elle pour qu'elle imprime la sortie? Je reçois une erreur:/usr/bin/awk: syntax error at source line 1 context is >>> . <<< /convert.sh
.convert.awk
d'indiquer qu'il s'agit d'unawk
script et non d'un scriptbash
. J'ai mis à jour le message avec la ligne de commande complète, et notez que j'ai ajouté un-f
indicateur que j'avais oublié à la première ligne (qui lui dit d'interpréter le fichier comme des commandes).Voici une solution Perl. Cela pourrait être possible avec sed / awk, mais le test de la partie numérique le rendrait probablement assez laid.
la source
Si vous êtes juste paresseux comme moi et que vous voulez tout faire sur une seule ligne de commande sans écrire de script, voici comment je le ferais.
Le
^I
se fait en appuyant sur ctrl+ v i.Le premier
sed
échange touttabs
pour","
. Le secondsed
insère un"
au début de chaque ligne et le dernier sed insère une fermeture"
à la fin de chaque ligne.la source
<kbd>text</kbd>
.sed -e 's/^I/","/g' -e 's/.*/"&"/'
ou même plus courtesed -e 's/^I/","/g;s/.*/"&"/'
.Une autre solution Perl:
invoquer avec
ec2-describe-snapshots -H --hide-tags | /var/tmp/script.pl > output.txt
la source
sed est l'utilitaire Linux le plus utile que j'ai jamais rencontré.
La première commande remplace tous les onglets de chaque ligne par des virgules et des guillemets. La deuxième commande insère des guillemets au début et à la fin de chaque ligne, de sorte que chaque valeur soit entourée de guillemets, ce qui permet aux virgules de faire partie de la valeur.
la source
Cela pourrait fonctionner pour vous:
la source