sort e uniq individualmente em um arquivo de texto

3

Eu tenho um arquivo como abaixo:

D F T E
A R T E
K A O E
E T P J

Gostaria de classificar cada coluna individualmente e as colunas individualmente, conforme abaixo:

A A O E
D F P J
E R T
K T

Gostaria de saber se existe alguém que saiba como usar o sort ou o uniq para fazer isso?

    
por bison72 03.07.2015 / 08:48

2 respostas

3

Você pode tentar algo assim:

paste -d'\t' <(cut -f 1 -d' ' file | sort -u) <(cut -f 2 -d' ' file | sort -u) <(cut -f 3 -d' ' file | sort -u) <(cut -f 4 -d' ' file | sort -u) >output

Eu coloquei tab como delimitador de paste para ser mais visível a saída.

    
por 03.07.2015 / 09:26
2

(Eu gosto da colar / cortar resposta do @taliezin. Aqui está uma solução mais prosaica no caso de muitos colunas). Dividir os dados em um arquivo por coluna, classificar esses arquivos e mesclar o arquivos. Estou assumindo colunas de largura fixa de 1 caractere, para lidar com a coluna 2 é mais curta que a coluna 3, por exemplo. Nesta demonstração data0 é o arquivo inicial:

for i in {1..4}
do  awk -v i=$i '{ch = substr($0,i*2-1,1);if(ch!=" ")print ch}' </tmp/data0 |
    sort -u >/tmp/data$i
done
awk -v rows=$(wc -l </tmp/data0) '
BEGIN{
    for(i=1;i<=4;i++)
       file[i] = "/tmp/data" i
    while(rows-->0){
        for(i=1;i<=4;i++){
             d = ""
             getline d <file[i]
             printf("%1s ",d)
        }
        printf "\n"
    }
}' </dev/null
    
por 03.07.2015 / 09:49

Tags