Meu arquivo tem duas colunas contendo a data e a precipitação em mm para cada dia.
2024/01/01 5
2024/01/02 0
...
2024/12/26 15
2024/12/27 0
Agora multiplicarei a segunda coluna do arquivo após uma determinada data por uma constante.
awk '$2=$2*0.86' <file>
multiplicará todos os valores da segunda coluna por 0,86.
Mas como posso multiplicar somente os valores após uma determinada data com a constante?
Se as linhas forem classificadas por data e exatamente uma linha com a "data certa" ocorrer no arquivo, você poderá usar a presença da "data certa" como um gatilho que altera o fator pelo qual você multiplica:
Usando qualquer awk:
Usando
mlr
:Como esse formato de data classifica o mesmo cronológica e lexicalmente, você pode fazer uma comparação simples de strings. Com
perl
:Tenha cuidado com o seguinte:
Você está usando o resultado dessa atribuição como condição (com a ação padrão sendo
{print}
), então ele excluirá as linhas que$2
forem 0 ou não forem um número.Também tenha cuidado, pois ao atribuir algo a um dos campos (aqui
$2
), o espaçamento original entre os campos será perdido, substituído por um caractere de espaço (o valor padrão deOFS
).A abordagem Perl acima preserva o espaçamento original (
\K
K
exceto o que está à esquerda dele).Também pode valer a pena notar que a formatação de ponto flutuante padrão para a saída para ( ) é (então usaria e para
awk
porOFMT
exemplo%.6g
)100000.5
,100000
enquanto está em .1000000.1
1e+06
%.15g
perl