colocando palavras correspondentes a uma chave em uma única linha

0

Eu tenho uma tabela de símbolos do formulário (pares de valores-chave)

01  aaluu desii
01  aaluu cipsa 
01  amaruuda ilaahabaadii
02  hai
02  nahii
02  txamaatxara

Para começar, devo colocar palavras (correspondentes à mesma chave) na mesma linha.

A saída esperada é

01 aaluu desii aaluu cipsa amaruuda ilaahabaadii
02 hai nahii txamaatxara

Note que existe um TAB que separa a chave do valor no arquivo de entrada, bem como o arquivo de saída.

    
por Upendra Pratap Singh 02.03.2016 / 12:24

2 respostas

1

com awk:

 awk '{for (i=2; i<=NF; i++) {a[$1]=a[$1]" "$i}} END{for ( i in a){print i"\t"a[i]}}'

Uma matriz a com índice $1 (chave) é criada e todos os campos em uma linha, exceto o primeiro campo, são anexados a essa matriz. Isso será feito para todas as linhas que tiverem chave similar.

Na END iterate, leia a matriz a index e imprima o índice da matriz (chaves), bem como o conteúdo da matriz (valores) com separadores de separadores entre chave e valores.

    
por 02.03.2016 / 14:23
1
sed '
    :1                                  #just mark
    N                                   #append next line
    s/^\(\([0-9]\+\s\+\).*\)\n/ /   #compare nums in the line beginning
    t1                                  #if prev succeed return to mark
    P                                   #print before \newline
    D                                   #delete before \newline, go to start
' <(sort -k1n table.file)
    
por 02.03.2016 / 13:13