awk 'FNR==NR{if(m<NF)m=NF;next}{for(i=NF;i<m;i++)$(i+1)="N/A"}1' tiny.txt tiny.txt
Anote o nome do arquivo de entrada especificado duas vezes.
Estou tentando fazer com que o AWK preencha o arquivo de texto das colunas "vazias" ".
Idéia básica de encontrar a linha mais longa com o AWK NF e verificar qual linha não tem valor nessa coluna. Em seguida, adicionando x vezes N / A para cada coluna vazia.
Este exemplo é separado por espaço de entrada, mas é claro que pode ser facilmente alterado para qualquer arquivo separado por caractere.
A entrada pode ser como:
aaa bbb ccc ddd
aaa
aaa bbb ccc
hhh ppp uuu
www yyy hhh
hhh 111 333 yyy ooo hyy uuuioooy
E saída em que a quantidade de colunas máximas no arquivo é calculada e N / A adicionado às colunas que estão vazias.
aaa bbb ccc ddd N/A N/A N/A
aaa N/A N/A N/A N/A N/A N/A
aaa bbb ccc N/A N/A N/A N/A
hhh ppp uuu N/A N/A N/A N/A
www yyy hhh N/A N/A N/A N/A
hhh 111 333 yyy ooo hyy uuuioooy
awk 'FNR==NR{if(m<NF)m=NF;next}{for(i=NF;i<m;i++)$(i+1)="N/A"}1' tiny.txt tiny.txt
Anote o nome do arquivo de entrada especificado duas vezes.
A maneira mais fácil é fazer isso em duas etapas: primeiro, descobrir a linha mais ampla:
max=$(awk 'max < NF { max = NF } END { print max }' infile)
Em seguida, use isso como entrada ao preencher as outras colunas:
awk -v max=$max '{ for(i=NF+1; i<=max; i++) $i = "N/A"; print }' infile
Tags text-processing awk