Amazonのec2コマンドラインツールを使用してec2スナップショットのリストを要求します。
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"
答え1
#!/usr/bin/awk -f
BEGIN { FS = "\t"; OFS = "," }
{
for(i = 1; i <= NF; i++) {
if ($i + 0 == $i) { $i = "=" $i }
else gsub(/"/, "\"\"", $i);
$i = "\"" $i "\""
}
print
}
この名前を指定すると、convert.awk
次のいずれかを使用して呼び出すことができます。
ec2-describe-snapshots -H --hide-tags | awk -f convert.awk > snapshots.csv
または(実行権限を追加した後chmod a+x convert.awk
)
ec2-describe-snapshots -H --hide-tags | ./convert.awk > snapshots.csv
これにより、各タブに対して新しい列が作成され、コメント列が一緒に配置されますが(タブが含まれていない場合)、空の列が追加されます(例の出力が同じであるため、必要になる場合があります)。すべてのスペースを分割するには(テーブルの追加タブは折りたたまれますが、説明の各単語は新しい列として表示されます)、そのFS="\t";
文を削除してください。
"
子孫のためにsまたはs、または埋め込みスペースを望まない場合は、=
1行にすることができます。
awk -v OFS=, '{$1=$1;print}'
答え2
これはPerlソリューションです。これはsed / awkで可能かもしれませんが、数値部分をテストすると非常に見苦しくなる可能性があります。
ec2-describe-snapshots -H --hide-tags | \
perl -e 'use Scalar::Util qw(looks_like_number);
while (chomp($line = <STDIN>)) {
print(join(",", map { "\"" . (looks_like_number($_) ? "=$_" :
do {s/"/""/g; $_}) . "\"" }
split(/\t/, $line)) . "\n");
}' \
> snapshots.csv
答え3
私のように怠惰な人で、スクリプトを書かずに1つのコマンドラインですべてのことをしたい場合は、この方法を使用してください。
ec2-describe-snapshots -H --hide-tags | sed -e 's/^I/","/g' | sed -e 's/^/"/' | sed -e 's/$/"/'> snapshots.csv
^I
+をctrl押すだけですv i。
最初sed
はすべてtabs
を","
。 2 番目はsed
各行の先頭に a を挿入し、最後の sed は各行の最後に終端子を挿入します。"
"
答え4
sedは私が見たものの中で最も便利なLinuxユーティリティです。
sed 's/\t/","/g' TabSeparatedValues.txt > CommaSeparatedValues.csv
sed -i 's/.*/"&"/' CommaSeparatedValues.csv
最初のコマンドは、各行のすべてのタブ文字をコンマと引用符で置き換えます。 2番目のコマンドは、各行の先頭と末尾に引用符を挿入して各値を引用符で囲んで、カンマを値の一部として使用できるようにします。