С perl
, предполагая, что поля в вашем CSV не не содержит встроенных запятых, новых строк и т. д.:
perl -lpe '$_ = join ",", reverse split /,/' input.csv
Простой цикл awk
awk -v num=3 'BEGIN {OFS=FS=","}
{tmp=$2; print; for (i=1;i<=num;i++) {$2=tmp"_"i; print}}
' file
Настройте число
по желанию.
perl -pse '$l = $_;
for my $k ( 1 .. $N ) { s/\z/$l =~ s|^[^,]+,[^,]+\K|_$k|r/e }
' -- -N=3 -- Input.data
опция -p
устанавливает неявное чтение файла в цикле + автопечать записей. -s
позволяет задавать переменные из командной строки, в нашем случае $N
. YMMV. По существу, вы хотите повторить каждую строку четыре раза с разными суффиксами после второго поля?
sed 'p;s/,/_1,/2p;s/_1/_2/p;s/_2/_3/' file
Это p
для печати строки как есть; первая команда s
добавляет _1
перед второй запятой и печатает; вторая и третья s
заменяется на _2
и _3
, вторая носит флаг p
для печати строки, а последняя версия печатается по умолчанию.
Изменить после расширенного вопроса
Если вы хотите зациклить заданное количество итераций, вы можете сделать
sed 'p;s/,/_1,/2p;G;s/$/0123456789+/;:a
s/\(_[0-9]*\)\([0-9]\)\(,.*\n.*\2\)\(.\)/\1\4\3\4/
s/_+/_10/;s/\(_[0-9]*\)\([0-9]\)+\(.*\n.*\2\)\(.\)/\1\40\3\2\4/
/_+/!P
/_123,/! ta
d' file
, где 123
в предпоследней строке — максимальный индекс. В данный момент у меня нет времени объяснять, но я могу сделать это позже, если вы хотите понять, что происходит.