Awk
solução:
awk 'BEGIN{
h = "1 2 3 4 5 6 7 8 11 12 20 21";
len = split(h, head);
print "\t\t" h
}
{
printf "%s\t", $1;
for (i = 1; i <= len; i++)
printf "%s%d", (i == 1? "" : OFS), ($2 ~ "\<" head[i] "\>");
print ""
}' file
-
h = "1 2 3 4 5 6 7 8 11 12 20 21"
- cabeçalho linha -
len = split(h, head)
- splith
line no arrayhead
onde os índices são ordenados a partir de1
e os valores são valores cruciais obtidos por divisão;len
contém um tamanho de matriz -
print "\t\t" h
- imprima a linha cabeçalho com os principais caracteres de tabulação -
printf "%s\t", $1;
- imprime o primeiro campo$1
-
for (i = 1; i <= len; i++)
- iterar porhead
itens-
$2 ~ "\<" head[i] "\>"
- verifique se o segundo campo$2
contém o item acessado atualmentehead[i]
-
A saída:
1 2 3 4 5 6 7 8 11 12 20 21
name1 1 1 0 1 0 0 0 1 0 0 0 0
name2 0 0 0 1 1 0 1 0 0 0 0 0
name3 0 0 0 0 0 0 0 1 0 0 0 0
name4 0 0 0 0 0 0 0 0 1 1 0 0
namex 0 0 0 0 0 0 0 0 0 0 1 1