perl -aF'\t' -lpe '$_ .= "\t" . ($. == 1 ? @F+1 : grep $_, @F[6..$#F])' data.set
Como precisamos adicionar outro campo no final da linha, usamos o operador .=
no registro atual $_
. Para o caso especial do 1º registro, simplesmente anexamos a expressão @F+1
, que é interpretada no contexto escalar para significar o número atual de campos mais 1.
Para os registros que não são de cabeçalho, a expressão grep $_, @F[6..$#F]
significa iterar sobre o sétimo elemento para a última da matriz @F
(que é gravada no registro usando o separador de campo da guia, especificada por meio do -F'\t'
Em um contexto escalar, ele retorna o número de vezes que a condição, no nosso caso, é um $_
solitário, para significar elementos diferentes de zero, na fatia 7a ... até o último elemento.
Resultado
#1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 10024 10395 41 K + 2 1 1 12 14 5 0 0 3 1 3 6 2 11
1 10679 10795 51 P + 2 1 1 15 14 3 0 0 2 1 2 3 1 11