Pergunta

Eu quero fazer algo parecido com isto:

cat abcd.txt | cut -f 2,1 

e eu quero que o pedido seja 2 e depois 1 na saída. Na máquina estou testando (FreeBSD 6), isto não se passa (a sua impressão em 1,2 fim). Você pode me dizer como fazer isso?

Eu sei que eu sempre pode escrever um script shell para fazer isso invertendo, mas eu estou procurando algo usando as opções de comando 'cortar'.

Eu acho que eu estou usando a versão 5.2.1 do coreutils contendo corte.

Foi útil?

Solução

Isto não pode ser feito usando cut. De acordo com a página do homem:

de entrada selecionado é escrito na mesma ordem que ele é lido, e é escrito exatamente uma vez.

Corrigindo cut tem sido proposta muitos vezes , mas mesmo correções completas foram rejeitadas .

Em vez disso, você pode fazê-lo usando awk, como este:

awk '{print($2,"\t",$1)}' abcd.txt

Substitua o \t com o que você está usando como separador de campo.

Outras dicas

resposta Lars' foi ótimo, mas eu achei um ainda melhor. O problema com o seu é ele corresponde \ t \ t como há colunas. Para corrigir isso use o seguinte:

awk -v OFS="  " -F"\t" '{print $2, $1}' abcd.txt

Onde:

-F"\t" é o que a corte no exatamente (guias).

-v OFS=" " é o de separar com (dois espaços)

Exemplo:

echo 'A\tB\t\tD' | awk -v OFS="    " -F"\t" '{print $2, $4, $1, $3}'

Esta saídas:

B    D    A    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top