Ajuda do AWK para preencher o restante das colunas com & nbsp no arquivo

4

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 
    
por tiny 31.08.2012 / 10:13

2 respostas

3

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.

    
por 31.08.2012 / 10:21
3

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
    
por 31.08.2012 / 10:21