Você pode usar o awk para dividir a primeira coluna:
~$ awk '{split($1,a,";"); $1="";for (i in a){print a[i],$0}}' myfile
K00001 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00004 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00008 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
Você divide a primeira coluna em ;
( split($1,a,";")
) e depois a exclui para imprimir toda a (nova) linha ( $0
) para cada item da matriz.
Como sugerido no comentário, após a edição, podemos ver que as guias são usadas como separador. Para usar a guia como separador de campo de saída, você pode usar OFS="\t"
, por exemplo, na BEGIN
parte do awk. Além disso, um campo vazio é inserido com $1=""
. Portanto, em vez de imprimir a[i]
, em seguida, $0
, é melhor definir $1
para a[i]
e, em seguida, imprimir $0
:
~$ awk 'BEGIN{OFS="\t"}{split($1,a,";"); for (i in a){$1=a[i];print}}' myfile
K00001 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00004 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00008 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0