タブ区切りデータをコンマ区切りデータに変換するには?

タブ区切りデータをコンマ区切りデータに変換するには?

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}'

おすすめ記事