Forçando a ordem dos campos de saída do comando cut
-
10-07-2019 - |
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.
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