Você pode fazer isso com um script awk
:
awk '{ while (NR + shift < $1) { print (NR + shift) " NA"; shift++ }; print } END { shift++; while (NR + shift < 13) { print (NR + shift) " NA"; shift++ } }' /tmp/test1
produzirá a saída necessária para /tmp/test1
(substitua isso por cada arquivo que você deseja processar).
De uma forma mais legível:
#!/usr/bin/awk -f
{
while (NR + shift < $1) {
print (NR + shift) " NA"
shift++
}
print
}
END {
shift++
while (NR + shift < 13) {
print (NR + shift) " NA"
shift++
}
}
Salve isto como um arquivo, diga fill-missing
, torne-o executável, então você pode simplesmente executar
./fill-missing /tmp/test1
O script processa cada linha, acompanhando o delta esperado com o número da linha atual em shift
. Portanto, para cada linha, se a linha atual ajustada não corresponder ao primeiro número da linha, ela imprime o número de linha apropriado seguido por NA
e incrementa o delta; uma vez que os números de linha coincidam, imprime a linha atual. No final do processo, imprime todas as linhas faltantes necessárias para atingir 12.