Прошло много времени с тех пор, как я использовал 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
Если вы хотите, чтобы скрипт принимал имена файлов или стандартный ввод, замените «here document» (все от до <<
конца файла) на:
"$@"
решение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