3

Я давно не использовал 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

2 ответа2

2

Вы можете сделать это с помощью 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

Если вы хотите, чтобы скрипт принимал имена файлов или стандартный ввод, замените "здесь документ" (все, начиная с << и заканчивая концом файла):

"$@"
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .