Estoy solicitando una lista de instantáneas ec2 a través de la herramienta de línea de comando ec2 de amazon:
ec2-describe-snapshots -H --hide-tags > snapshots.csv
Los datos se parecen a esto:
SnapshotId VolumeId StartTime OwnerId VolumeSize Description
snap-00b66464 vol-b99a38d0 2012-01-05 5098939 160 my backup
¿Cómo puedo interceptar los datos antes de redirigirlos snapshots.csv
y hacer lo siguiente?
- reemplazar "pestañas" con comas
- encapsular valores con citas
- si un valor es todos números, agregue un prefijo con un
=
símbolo para que Excel lo trate como texto; por ejemplo,OwnerId
debe ser"=5098939
"(este no es necesario si no se puede hacer en línea y en su lugar requeriría un archivo o función de script)
salida deseada:
"SnapshotId","VolumeId","StartTime","OwnerId","VolumeSize","Description"
"snap-00b66464","vol-b99a38d0","2012-01-05","=5098939","=160","my backup"
Respuestas:
Suponiendo que nombre esto
convert.awk
, puede llamar cono (después de agregar permisos de ejecución
chmod a+x convert.awk
)Esto creará una nueva columna para cada pestaña, que mantendrá la columna de comentarios juntos (a menos que contenga pestañas), pero agregará columnas vacías (aunque así es como se ve su salida de muestra, por lo que tal vez realmente quiera eso). Si desea dividir en todos los espacios en blanco (esto colapsará pestañas adicionales dentro de la tabla pero pondrá cada palabra en la descripción como una nueva columna), saque la
FS="\t";
declaración.Para las generaciones futuras, si no necesita el
"
s o=
s o el espacio en blanco incrustado, puede hacerlo de una sola línea:fuente
./convert.sh
Entonces, ¿guardo esto en un archivo como , chmod + x, y luego canalizo la entrada para que imprima la salida? Estoy consiguiendo un error:/usr/bin/awk: syntax error at source line 1 context is >>> . <<< /convert.sh
.convert.awk
que indique que es unawk
script y nobash
uno. Actualicé la publicación con la línea de comando completa y noté que agregué una-f
bandera que había olvidado a la primera línea (que le dice que interprete el archivo como comandos).Aquí hay una solución perl. Esto podría ser posible con sed / awk, pero la prueba de la parte numérica probablemente lo haría bastante feo.
fuente
Si solo eres flojo como yo y quieres hacerlo todo en una línea de comando sin escribir un script, así es como lo haría.
El
^I
se hace presionando ctrl+ v i.El primero
sed
cambia todotabs
por","
. El segundosed
inserta un"
al principio de cada línea, y el último sed inserta un cierre"
al final de cada línea.fuente
<kbd>text</kbd>
.sed -e 's/^I/","/g' -e 's/.*/"&"/'
o incluso más cortased -e 's/^I/","/g;s/.*/"&"/'
.Otra solución de Perl:
invocar con
ec2-describe-snapshots -H --hide-tags | /var/tmp/script.pl > output.txt
fuente
sed es la utilidad de Linux más útil que he encontrado.
El primer comando reemplaza todas las pestañas en cada línea con comas y comillas. El segundo comando inserta comillas al principio y al final de cada línea, de modo que cada valor estará rodeado de comillas, lo que permite que las comas sean parte del valor.
fuente
Esto podría funcionar para usted:
fuente