сценарий оболочки для изменения части каждой строки на новое значение - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть файл, содержащий в каждой строке значение даты и времени. У меня есть команда, чтобы изменить все значения на сегодняшнюю дату, но мне нужно иметь возможность изменять не только сегодняшнюю, но, скажем, первые 10 строк.до сегодняшнего дня следующие 10 строк будут изменены на вчерашнюю дату и т. д.Не могли бы вы помочь мне в этом?

фрагмент файла:

bla|TRANSACTTIME=20181127153310|bla|bla
bla|TRANSACTTIME=20181127153310|bla|bla
bla|TRANSACTTIME=20181127153310|bla|bla
bla|TRANSACTTIME=20181127153310|bla|bla

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, что это должно работать,

#!/bin/bash
set +x

STEP=3            #size of the block you want to modify
DATE_STEP=1       #how many days you want to step
BASEDATE=20181127 #basedate you want to replace

LINES=$(cat $1 | wc -l)
BLOCKS=$((LINES / STEP ))
MODULE=$((LINES % STEP ))
if [ "$MODULE" -ne "0" ];
then
    BLOCKS=$((BLOCKS + 1))
fi

START=1
END=$STEP
ADD_DAYS=0
for i in $(seq 1 $BLOCKS);
do
  NEWDATE=$(date +'%Y%m%d' -d"today+$ADD_DAYS days")

  #sed is used twice, first to get the required lines and then to do the replacement
  sed -n ${START},${END}p $1 | sed s/$BASEDATE/$NEWDATE/

  START=$((END + 1))
  END=$((END + STEP))
  ADD_DAYS=$((ADD_DAYS + DATE_STEP))
done

вывод идет прямо на стандартный вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...