Добавление строки в начало файла со значениями, вычисленными с даты

Извините, но вы не указали среду достаточно близко. Это зависит от диспетчера окон. Для Debian существует несколько окружений рабочего стола, и в каждой из них используется свой оконный менеджер. Например, Gnome использует Unity, LXDE использует openbox и т. Д. Это означает, что вам следует искать способы увеличения размера окон. в вашем оконном менеджере. Я написал это как ответ, потому что пока не могу комментировать.

1
21.08.2018, 02:18
3 ответа

Дата Солярис/Экс

К сожалению, нет решения, возможного только с (датой )Solaris/Aix.

Дата GNU

Если доступна дата gnu:

Построить нужную дату в переменной:

$ date +'%Y/%m/01 -9 months'
2017/07/01 -9 months
$ a=$(date +'%Y/%m/01 -9 months')
$ a=$(date -d "$a" +'%Y%m%d')
$ a='MHHHRGFILE ('"$a"') 99991231'
$ echo "$a"
MHHHRGFILE (20161001) 99991231

Или просто:

$ a=$(date -d "$(date +'%Y/%m/01 -9 months')" +'%Y%m%d')
$ a='MHHHRGFILE ('"$a"') 99991231'

Баш

Если доступен bash (4.2+ ):(используя 272 дня как эквивалентные 9 месяцам)

$ TZ=UTC0 printf '%(%Y%m01)T' $(($(date +'%s') - 3600*24*272))
20161001

$ a=$(TZ=UTC0 printf '%(%Y%m01)T' $(($(date +'%s') - 3600*24*272)))

кш93

Если ksh доступен:

$ printf "%(%Y%m%d)T" "9 month ago"

Перл

Если доступен Perl (9 месяцев приблизительно равны 3600 *24 *30 *9):

$ perl -e 'use POSIX qw(strftime); print strftime "%Y%m01",localtime(time()- 3600*24*30*9);'
20161001

$ a=$(perl -e 'use POSIX qw(strftime); print strftime "%Y%m01",localtime(time()- 3600*24*30*9);')

Редактировать файл

Добавить эту переменную к первой строкеfile

$ sed '1s/.*/&'"$a"'/' file >file.new; mv file.new file

Вот именно.

2
27.01.2020, 23:24

Тут руками не сложно:

eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 9)) # need to strip the 0 for shells like bash or some 
                  # ash derivatives (but not ksh) that complain
                  # about an invalid 09 octal number in arithmetic
                  # expressions. Some date implementations support
                  # date +%-m, but that's not standard.
if [ "$m" -le 0 ]; then
  m=$((m + 12)) y=$((y - 1))
fi
if [ "$m" -lt 10 ]; then
  m=0$m # 0-pad single-digit numbers
fi
sed "1s/$/MHHHRGFILE $y${m}01 99991231/" < file > newfile
1
27.01.2020, 23:24

Вот окончательный вариант скрипта, который работает и выводит текст и дату (на 9 месяцев назад и выбирает первый день этого месяца )в файл на "solaris AIX" Kshell.

#!/bin/ksh

eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 9))

if [ "$m" -le 0 ]; then
  m=$((m + 12)) y=$((y - 1))
fi

echo "$m"
prvdt=$y${m}01
echo $prvdt
a='MHHHRGFILE '"$prvdt"' 99991231'
echo $a


var="$a"
echo $var
destdir=/applic/e396/data/NNA/Dclients_for_FPD.txt
echo 'Destination File is locate at' $destdir

echo $var >> $destdir

Единственная проблема заключается в том, что я добавляю текст MHHHRGFILE 20161001 99991231в конец файла, в то время как мне нужно добавить его в самом верху в качестве первой строки.

Пожалуйста, дайте мне знать/помогите правильно написать код, чтобы вывод выводился в первую строку целевого файла.

0
27.01.2020, 23:24

Теги

Похожие вопросы