Reordenar campos / caracteres com comando de corte [duplicado]

2

Eu tenho um arquivo - temp.txt - que contém

ABCDF

PQRST

LMNOP

Eu tentei este comando cut

$ cut -c 2-5 temp.txt
BCDF

QRST

MNOP

a saída está certa.

$ cut -c 1,2,3,4 temp.txt
ABCD

PQRS

LMNO

a saída está certa.

Mas quando eu mudo a sequência, significando

$ cut -c 2-4,1 temp.txt
ABCD

PQRS

LMNO

acima da saída exibida.

mas logicamente a saída é

BCDA

QRSP

MNOL

então minha pergunta é como isso acontece, qualquer motivo por trás disso.

    
por Sandy8086 04.09.2012 / 07:58

2 respostas

3

A explicação está em man cut , embora seja fácil lê-la como sua expectativa preferida. No entanto, diz:

Selected input is written in the same order that it is read  

É talvez ambíguo quanto ao que se entende por entrada, mas tipicamente Opções são apenas isso, opções, enquanto o arquivo que está sendo processado é definitivamente entrada .

O list , por exemplo, -c 2,3,4,1 é muito parecido com a lista regex: [2341] ; Significa qualquer um dos números da lista, mesmo que eles sejam duplicados. -c 2,2,2,2,2,2 é o mesmo que -c 2 .. e para o regex, [2222222] é o mesmo que [2] ... Portanto, a ordem das suas opções não é relevante.

    
por 04.09.2012 / 11:05
2

A solução é:

sed 's:^\(.\)\(.*\)::' file.txt

(alguém publicou esta resposta para uma pergunta semelhante ontem)

O corte parece não ordenar a saída, apenas selecione intervalos de colunas / campos e a saída na mesma ordem em que estavam.

    
por 04.09.2012 / 08:32