Como remover uma parte de uma coluna usando o awk

5

Eu tenho isso:

2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:03-09:26:20
2018:01:03-09:26:20

Eu quero manter a data, mas não a hora, para classificar o número de mensagens por dia:

2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03

Eu quero fazer isso com awk , se possível.

    
por Namless 08.01.2018 / 11:50

5 respostas

12
  • awk

    awk -F- '$0=$1' file
    
  • corte

    cut -d- -f1 file
    
  • sed

    sed 's/-.*//' file
    
  • perl

    perl -pe 's/-.*//' file
    
por 08.01.2018 / 12:05
6

Simplesmente com awk :

awk -F'-' '{ print $1 }' file
  • -F'-' - trata - (traço) como separador de campo

No seu caso simples, a abordagem grep seria ainda mais simples:

grep -o '^[^-]*' file
    
por 08.01.2018 / 11:52
3

Se a entrada somente contiver os registros de data e hora, será fácil definir o traço como o separador de campo e imprimir somente o primeiro campo:

$ awk -F- '{print $1}' input
2018:01:02
2018:01:02

Mas se você também tiver alguma outra coisa, diga input2 contains

2018:01:02-23:52:48 some data 
2018:01:02-23:52:48 something else

em seguida, isso descartaria o restante da linha e, para outro processamento, talvez você não queira alterar o separador de campos. Mas você pode fazer uma substituição simples no primeiro campo e imprimir a linha resultante:

$ awk '{sub(/-.*/, "", $1)} 1' input2
2018:01:02 some data
2018:01:02 something else
    
por 08.01.2018 / 12:21
2
awk -F- ' { print $1 } ' | sort | uniq -c

Também fará o resumo para você:

  3 2018:01:02
  2 2018:01:03
    
por 08.01.2018 / 15:43
0

Eu consegui o mesmo abaixo do método de substring awk

 awk '{print substr($1,1,10)}'  filename

Saída

2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03
    
por 08.01.2018 / 17:23

Tags