Altera a ordem dos campos exibidos da saída de comando arbitrária

2

Como eu poderia alterar a ordem dos campos de um determinado comando?

Como exemplo, pegue a saída de ls -l . Por padrão, o nome do arquivo é exibido como o último campo da saída. Como eu poderia canalizar essa saída para tornar o nome do arquivo o primeiro campo mostrado?

Meu pensamento inicial foi usar o comando cut, mas independentemente da ordem em que os campos são passados para a opção -f, eles sempre são exibidos na ordem original.

Observação: estou usando apenas ls -l como um exemplo fácil, mas gostaria de encontrar uma expressão de uso geral que pudesse ser usada para qualquer comando que gerasse dados em colunas. Se também pudesse ser aplicado a dados delimitados, seria ótimo também.

    
por Mike Deck 09.09.2011 / 20:27

1 resposta

2

Para um número fixo de campos, você pode usar awk , por exemplo, para trocar o segundo e o quarto campo:

command | awk '{ t = $2; $2 = $4; $4 = t; print }' | column -t

Mas infelizmente ls -l não tem um número fixo de campos (separados por espaços) porque também os nomes de arquivos podem conter espaços: esta é a razão pela qual não é desencorajada parsing ls -l output.

    
por 09.09.2011 / 20:44