垂直格式化保持第一列

垂直格式化保持第一列

我已經很久沒有使用 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,但是,使用awkyou 可以非常優雅地表達您想要完成的任務:

#!/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

相關內容