最初の列を維持したまま垂直にフォーマットする

最初の列を維持したまま垂直にフォーマットする

grep や sed を使うのは久しぶりですが、これはできると思います。csv を取得して、最初の列を維持/複製しながら垂直にフォーマットするにはどうすればよいでしょうか。

Ex.
Input:
A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3

Output:
A, 1
A, 2
A, 3
B, 1
B, 2
B, 3
C, 1
C, 2
C, 3

答え1

sed、または のいくつかのバージョンを使用してこれを行うこともできますgrepが、 を使用すると、awk達成したいことを非常にエレガントに表現できます。

#!/bin/sh

awk -F, '
    BEGIN {
        OFS=","
    }
    {
        for (i=2; i<=NF; i++) {
            print $1, $i
        }
    }
' <<EOF
A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3
EOF

スクリプトでファイル名または標準入力を取得する場合は、「ヒア ドキュメント」(<<ファイルの末尾までのすべて) を次のように置き換えます。

"$@"

答え2

解決sed策。

sed -r ':a;s/([A-Z],)( [0-9]),( [0-9])/\1\2\n\1\3/;ta' <<<'A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3'
A, 1
A, 2
A, 3
B, 1
B, 2
B, 3
C, 1
C, 2
C, 3

関連情報