AWK:
cat input |
awk -F ':' '{if ($2 < 15) {print $0 > "15.log"} else print}' |
awk -F ':' '{if ($2 < 30) {print $0 > "30.log"} else print}' |
awk -F ':' '{if ($2 < 45) {print $0 > "45.log"} else print}' |
cat > 60.log
Eu tenho um arquivo de log e gostaria de cortá-lo em cópias de 15min. No arquivo de log, as linhas começam com:
dd mmm yyyy hh:mm:ss,xxx
por exemplo,
12 Feb 2013 16:05:02,xxx log text...
e o arquivo gira a cada hora, então eu gostaria de fazer uma cópia do arquivo de log, dividi-lo em 15min de log e dizer 4 arquivos de log.
AWK:
cat input |
awk -F ':' '{if ($2 < 15) {print $0 > "15.log"} else print}' |
awk -F ':' '{if ($2 < 30) {print $0 > "30.log"} else print}' |
awk -F ':' '{if ($2 < 45) {print $0 > "45.log"} else print}' |
cat > 60.log
Se todas as linhas estiverem formatadas corretamente,
awk -F: '{print >int($2/15)*15 ".log"}' inputfile
produzirá o arquivo 0.log, 15.log, 30.log e 45.log.
Ele funciona dividindo-se usando dois pontos como o delimitador, portanto, o segundo campo de dd mm yyyy hh:mm:ss,xxx
é mm
. Nós dividimos isso por 15, pegue a parte inteira e multiplique por 15 para obter o valor de mm
no início do quarto de hora. Em seguida, anexamos a string ".log"
. Em seguida, informamos ao awk para imprimir a linha atual para esse arquivo.