Aqui está uma variante AWK um pouco mais idiomática para processar current.txt
( a segunda resposta de Steve é ainda mais idiomática! ):
awk '/^To(|min|max) / { print $1, $2 + 1; next } 1' current.txt
Isso procura as linhas que começam com To
, seguidas por nada, min
ou max
, seguidas por um espaço; para linhas correspondentes, o primeiro campo e o segundo campo são incrementados, separados pelo separador de campos de saída padrão (espaço). Então, ele pula para a próxima linha. Todas as outras linhas são impressas como estão ( 1
é um atalho para isso no AWK).
Observe que sobrescrever o arquivo com os novos valores provavelmente não é uma boa ideia: você não saberá se os valores foram corrigidos ou não ... Se você recuperar o arquivo do dispositivo toda vez, isso não acontece aplicar.
O mesmo raciocínio se aplica a ws2308.log
, então vamos processá-lo inteiramente:
$ awk 'NF >= 5 { $5 = $5 + 1 } 1' ws2308.log
20161203150600 2016-Dec-03 15:06:00 11.8 -0.1 -3.2 65 87 0.0 157.5 SSE -1.1 569.80 1015.700
20161203152100 2016-Dec-03 15:21:00 12.3 -0.1 -3.2 64 87 0.0 157.5 SSE -1.1 569.80 1015.600
20161203153600 2016-Dec-03 15:36:00 12.2 -0.2 -3.3 64 87 0.0 135.0 SE -1.2 569.80 1015.700
Se você quiser apenas a última linha:
$ awk 'NF >= 5 { $5 = $5 + 1; lastline = $0 } END { print lastline }' ws2308.log
20161203153600 2016-Dec-03 15:36:00 12.2 -0.2 -3.3 64 87 0.0 135.0 SE -1.2 569.80 1015.700
ou se você quiser o arquivo com apenas a última linha alterada :
$ awk 'length(prevline) > 0 { print prevline } NF >= 5 { prevline = $0; $5 = $5 + 1; lastline = $0 } END { print lastline }' ws2308.log
20161203150600 2016-Dec-03 15:06:00 11.8 -1.1 -3.2 65 87 0.0 157.5 SSE -1.1 569.80 1015.700
20161203152100 2016-Dec-03 15:21:00 12.3 -1.1 -3.2 64 87 0.0 157.5 SSE -1.1 569.80 1015.600
20161203153600 2016-Dec-03 15:36:00 12.2 -0.2 -3.3 64 87 0.0 135.0 SE -1.2 569.80 1015.700