Я специалист по данным и работаю с текстовым файлом, в котором указано, сколько наборов данных у меня есть для конкретного участника, путем печати идентификатора участника в новой строке для каждого набора данных. Во втором столбце подсчитывается количество разных участников, вот так
a 1
a 1
a 1
b 2
b 2
c 3
d 4
d 4
d 4
Теперь мне нужно создать матрицу, которая имеет столбец для каждого участника и указывает, какие строки относятся к этому участнику, давая ей значение 1 против 0. У меня более 2000 участников, поэтому я не могу сделать это вручную или выписать все столбцы числа и что печатать где но надо создать правило.
Количество столбцов в моем файле будет числом в последней строке столбца 2 + 2 (в примере это должно быть 4 + 2 = 6). По сути, для каждой строки мне нужно напечатать 1 в столбцах, которые соответствуют (значение в столбце 2 (количество участников) + 2). Для этой строки все остальные столбцы получают значение 0. Таким образом, для строки 1 столбец (1 + 2 =) 3 получает 1, все остальные столбцы получают значение 0. Для строки 2 столбец (1 + 2 =) 3 получает 1, все остальные столбцы получают значение 0 и т. д.
Это должно выглядеть так:
a 1 1 0 0 0
a 1 1 0 0 0
a 1 1 0 0 0
b 2 0 1 0 0
b 2 0 1 0 0
c 3 0 0 1 0
d 4 0 0 0 1
d 4 0 0 0 1
d 4 0 0 0 1
Хотел бы я предоставить код, который я пробовал, но я не знаю, с чего начать.
Надеюсь, что кто-нибудь сможет помочь. Спасибо!






awk спешит на помощь!
$ awk 'NR==FNR{if (max<$2)max=$2; next}
{printf "%s %s", $1,$2;
for(i=1;i<=max;i++) printf " %s", i==$2;
print ""}' file{,}
a 1 1 0 0 0
a 1 1 0 0 0
a 1 1 0 0 0
b 2 0 1 0 0
b 2 0 1 0 0
c 3 0 0 1 0
d 4 0 0 0 1
d 4 0 0 0 1
d 4 0 0 0 1
с этим алгоритмом двойного сканирования последовательность и порядок не имеют значения.