Я запрашиваю список снимков ec2 с помощью инструмента командной строки ec2 amazon:
ec2-describe-snapshots -H --hide-tags > snapshots.csv
Данные выглядят примерно так:
SnapshotId VolumeId StartTime OwnerId VolumeSize Description
snap-00b66464 vol-b99a38d0 2012-01-05 5098939 160 my backup
Как я могу перехватить данные, прежде чем перенаправить их snapshots.csv
и сделать следующие вещи:
- заменить "вкладки" запятыми
- заключать значения в кавычки
- если значением являются все числа, добавьте к нему префикс,
=
чтобы Excel воспринял его как текст - например,OwnerId
должно быть"=5098939
"(это не нужно, если его нельзя сделать встроенным и вместо этого потребуется файл сценария или функция)
желаемый результат:
"SnapshotId","VolumeId","StartTime","OwnerId","VolumeSize","Description"
"snap-00b66464","vol-b99a38d0","2012-01-05","=5098939","=160","my backup"
Ответы:
Предполагая, что вы называете это
convert.awk
, вы можете позвонить либо сили (после добавления прав на выполнение,
chmod a+x convert.awk
)Это создаст новый столбец для каждой вкладки, который будет содержать столбец комментариев вместе (если только он не содержит вкладок), но добавит пустые столбцы (хотя именно так выглядит пример выходных данных, так что, возможно, вы действительно этого хотите). Если вы хотите разделить все пробелы (это приведет к свертыванию лишних вкладок в таблице, но каждое слово в описании будет добавлено как новый столбец), выньте
FS="\t";
оператор.Для будущих поколений, если вам не нужны
"
s или=
s или встроенный пробел, вы можете сделать его однострочным:источник
./convert.sh
, chmod + x, и затем направляю ввод в него так, чтобы это напечатало вывод? Я получаю сообщение об ошибке/usr/bin/awk: syntax error at source line 1 context is >>> . <<< /convert.sh
.convert.awk
указать, что этоawk
скрипт, а неbash
один. Я обновил запись, указав полную командную строку, и обратите внимание, что-f
в первую строку я добавил забытый флаг (который говорит о том, что файл следует интерпретировать как команды).Вот решение Perl. Это может быть возможно с sed / awk, но тестирование числовой части, вероятно, сделает его довольно уродливым.
источник
Если вы просто ленивый как я и хотите сделать все это в одной командной строке без написания сценария, вот как я это сделаю.
Это
^I
делается нажатием ctrl+ v i.Первый
sed
меняет всеtabs
на","
. Втораяsed
вставляет a"
в начале каждой строки, а последняя sed вставляет закрытие"
в конце каждой строки.источник
<kbd>text</kbd>
.sed -e 's/^I/","/g' -e 's/.*/"&"/'
или даже корочеsed -e 's/^I/","/g;s/.*/"&"/'
.Другое решение Perl:
вызывать с
ec2-describe-snapshots -H --hide-tags | /var/tmp/script.pl > output.txt
источник
sed - самая полезная утилита linux, с которой я когда-либо сталкивался.
Первая команда заменяет все вкладки в каждой строке запятыми и кавычками. Вторая команда вставляет кавычки в начале и конце каждой строки, так что каждое значение будет заключено в кавычки, что позволяет запятым быть частью значения.
источник
Это может работать для вас:
источник