escreva no arquivo a partir de determinada linha

escreva no arquivo a partir de determinada linha

Eu tenho um arquivo que se parece com isso:

**********************************
Some notes are here
Year Month Day Hour Minute Second
. . . . . . . . . . . . . . . . .

Abaixo disso, gostaria que as datas aparecessem usando o seguinte código

#!/bin/bash
for  timestamp in (1262300400..1264978800..600)
do
date -d @"$timestamp" '+%Y %m %d %H %M %S';
done | grep -Ev '[15]0 00$' > file.txt

Se você quiser saber como consegui esse código, leia a perguntaIntervalo de datas com minutos A dificuldade nesta questão é a última parte "> file.txt". O código atual substitui o que já está no arquivo.txt. Quero que esse loop imprima as datas abaixo das notas do arquivo 'file.txt', para que ele comece a escrever, digamos, na 5ª linha ou algo assim.

Então a saída desejada seria

**********************************
Some notes are here
Year Month Day Hour Minute Second
. . . . . . . . . . . . . . . . .
2010 01 01 00 00 00
2010 01 01 00 20 00
2010 01 01 00 30 00
2010 01 01 00 40 00
2010 01 01 01 00 00 

Responder1

O redirecionamento usando >criaria o arquivo de saída para o qual você redireciona ou, se já existir, o truncaria para tamanho zero. Qualquer gravação no arquivo começaria no início do arquivo e os dados seriam gravados sequencialmente. Isso énãoO que você quer fazer.

Redirecionar usando >>criaria o arquivo de saída ou, se já existir, criarianãotruncá-lo. Qualquer gravação no arquivo aconteceria no final do arquivo. Isto é o que você quer fazer.

Além disso, você tem um erro de sintaxe no código. Presumo que você queira usar uma expansão de chaves no loop:

#!/bin/bash
for  timestamp in {1262300400..1264978800..600}; do
    date -d @"$timestamp" '+%Y %m %d %H %M %S'
done | grep -v '[15]0 00$' >>file.txt

Além disso, este é umextremamenteloop lento, chamando dateum grande número de vezes (4.465 vezes, para ser exato; o número de segmentos de tempo de dez minutos em um mês de 31 dias). Para acelerar as coisas, use o fato de que o GNU datepode ler um arquivo (aqui, fornecemos os carimbos de data e hora na entrada padrão, que datelê usando -f -):

#!/bin/bash
printf '@%s\n' {1262300400..1264978800..600} |
date -f - '+%Y %m %d %H %M %S' |
grep -v '[15]0 00$' >>file.txt

Isso seria executado em um segundo ou menos.

Também removi o -Eda invocação de grepporque você não usa uma expressão regular estendida.

informação relacionada