Como separar campos com espaço ou tab no awk

32

Enquanto brincava com awk eu vim para executar:

ls -la >> a.txt ; awk {'print   '} a.txt ;

Isso está dando saída como:

53277-rw-------
52347-rw-------

Como posso obter um espaço entre esses dois amigos de saída?

    
por Ten-Coin 23.12.2012 / 10:12

5 respostas

48

Basta alterar a linha para

ls -la >> a.txt ; awk {'print  "        " '} a.txt ;

isso deve imprimir a saída com espaços.

Espero que isso ajude.

Editar:

Como sugerido por McNisse você pode usar o printf, que forneceria um bom formato de saída

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", , )'} a.txt ;
    
por devav2 23.12.2012 / 10:35
47

Outra técnica específica do awk, use o "separador de campo de saída"

ls -la | awk -v OFS='\t' '{print , }'

A vírgula é crucial aqui.

    
por glenn jackman 23.12.2012 / 13:33
3

Eu sei que este é um tópico antigo, mas estou apenas aprendendo e achei esses posts úteis. Minha melhor solução foi usar o gawk para inserir espaços entre as variáveis ​​para você.

ls -la | gawk '{print , }'
    
por codeJediNinjaDork 19.09.2014 / 00:55
1

Uma maneira simples de obter guias é:

awk {'print "\t"'}
    
por becko 22.11.2017 / 03:49
0

Para colocar o espaço entre os argumentos, basta adicionar " " , por ex. awk {'print " "'} .

No entanto, é não recomendado para analisar a saída do comando ls , já que não é confiável e a saída é para humanos, não para scripts. Portanto, use comandos alternativos, como find ou stat .

Aqui está um exemplo usando o GNU stat :

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

, que imprimirá sua saída amiga da máquina (em forma concisa), para que você possa obter exatamente o que precisa. Em seguida, use -c para usar um formato específico ou use awk , cut ou read para obter as colunas certas.

Verifique stat --help para outras opções. Por exemplo, para imprimir o dia da modificação, verifique este exemplo .

    
por kenorb 10.04.2016 / 06:33