Incrementar uma data em um arquivo

1

Eu tenho um arquivo com uma única linha de texto dentro.Como posso modificar seu conteúdo sem usar o vi editor.Below é o exemplo:

PROCESS DATE =2014-08-01

Eu quero incrementar o "2014-08-01" na próxima data possível. Minha ideia é criar uma variável. Como posso fazer isso?

    
por user80484 11.08.2014 / 15:17

4 respostas

1

Depende de quão sofisticado você precisa disso. Se tudo que você precisa é mudar o 01 para um 02 , você pode usar algo como

sed -i 's/01/02/' file

ou

perl -i -pe 's/01/02/' file

Ou, para estar no lado seguro, faça isso somente se 01 estiver no final da linha:

sed -i 's/01$/02/' file
perl -i -pe 's/01$/02/' file

Ambas as soluções acima modificarão o arquivo original por causa do -i flag.

Se você precisar considerar as datas reais e, por exemplo, incrementar 2014-02-28 a 2014-03-01 , será necessário usar uma linguagem de programação completa que possa analisar datas ou brincar com a% comandodate:

$ while IFS='=' read -r text date; do 
    echo "$text=$(date -d "$date + 1 day" +%F)"; 
  done < file > new_file

Acima, as linhas de entrada serão divididas em = , salvando a parte antes de = como $text e o restante como $date . Em seguida, o $date é alimentado para o comando date , que pode manipular a data como adicionar um dia e imprimi-lo no formato desejado (nesse caso, o formato é %F , o que significa Year-Month-Day ). Note que isto assume a data do GNU.

O comando echo imprime o conteúdo de $text e, em seguida, a data é incrementada em um dia. Isso falhará se você tiver mais de um = em qualquer linha do seu arquivo.

    
por 11.08.2014 / 15:26
1

Você pode usar perl :

perl -MTime::Piece -pi -e 's/\d{4}-\d\d-\d\d/
 (Time::Piece->strptime($&,"%Y-%m-%d")+24*60*60)->date/ge' file

incrementaria todas as datas no arquivo.

    
por 11.08.2014 / 15:32
0

Eu escreveria:

increment_date() {
    local current=$(grep -oP 'PROCESS DATE =\K.+' file)
    local next=$(date -d "$current + 1 day" +%F)
    sed -i "/PROCESS DATE =/s/$current/$next/" file
}

cat file
increment_date
cat file
increment_date
cat file
PROCESS DATE =2012-02-28
PROCESS DATE =2012-02-29
PROCESS DATE =2012-03-01

Isso pressupõe que a linha DATA DE PROCESSO ocorre apenas uma vez no arquivo e está sozinha em uma linha.

    
por 11.08.2014 / 15:43
0

Meus próprios dateutils fornecem uma ferramenta de linha de comando dadd que passa por um arquivo de texto e adiciona algo a cada data encontrada:

$ dadd -S +1d FILE
PROCESS DATE =2014-08-02
    
por 14.10.2014 / 09:13