-
awk
awk -F- '$0=$1' file
-
corte
cut -d- -f1 file
-
sed
sed 's/-.*//' file
-
perl
perl -pe 's/-.*//' file
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.
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
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
awk -F- ' { print $1 } ' | sort | uniq -c
Também fará o resumo para você:
3 2018:01:02
2 2018:01:03
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