Como extrair valores exclusivos dentro de colunas

1

Eu tenho um arquivo de dados com 10.000 colunas e 117.000 linhas. meus dados originais têm muita repetição dentro de cada coluna. é como:

inputfile.txt:

    123 124 111 
    321 124 111 
    123 000 111 
    123 111 222

Eu quero manter uma cópia de cada valor em cada coluna, como:

    123 124 111
    321 000 222
        111 

Eu preciso de um programa para fazer todas as colunas juntas, já que tenho 10.000 colunas.

    
por zara 09.09.2015 / 02:20

1 resposta

1

Isso deve fazer o que você precisa em 5 linhas de código (2 das quais estão apenas arrumando):

#!/bin/bash
# run this, specifying input file as $1 (parameter 1)

# delete any pre-existing column files from /tmp
find /tmp -maxdepth 1 -name "column*" -delete

# create /tmp/columnN files - each file holds one column of $1
awk '{for (f=1; f<=NF; f++) {print $f >>"/tmp/column"f}}' "$1"

# iterate through column files, sorting and removing duplicates
find /tmp -maxdepth 1 -name "column*" -execdir sort -o \{\} -u \{\} \;

# re-combine columns and output to stdout
paste /tmp/column*

# delete column files from /tmp
find /tmp -maxdepth 1 -name "column*" -delete

É possível que com um número muito grande de colunas (como você tem) o comando colar falhe porque / tmp / column * não pode ser totalmente expandido.

Uma diferença na saída do seu exemplo é que a saída de cada coluna é classificada, enquanto no original a segunda coluna não foi classificada.

    
por 10.09.2015 / 09:19