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

Я использую Solaris O / S и новичок в UNIX и этот форум. Вот основные данные для UNIX O / SI, использующие:

$ oslevel 7.1.0.0 $ ps PID TTY TIME CMD 10944546 pts/1 0:00 -ksh 17563840 pts/1 0:00 ps $ 

Мне нужно написать текст в первой строке текстового файла

 test.txt 

Текст, который нужно добавить в первую строку на test.txt это

MHHHRGFILE (sysdate – первый день 9 месяцев) 99991231

Для средней части (sysdate – первый день 9 месяцев), например. Сегодняшняя дата – 26.07.2017, мне нужно будет минус 9 месяцев, а затем первый день этого месяца. Смысл, мне нужно будет распечатать 20161001

В основном я напишу:

 MHHHRGFILE 20161001 99991231 

в первую строку файла test.txt где MHHHRGFILE и 99991231 постоянно остаются постоянными.

3 Solutions collect form web for “Добавление строки в начале файла со значениями, вычисленными с даты”

Дата Solaris / Aix

К сожалению, решение (только) 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))) 

ksh93

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

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

Perl

Если 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 

Вот и все.

Это не сложно сделать вручную:

 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 

Вот окончательный сценарий, который работает и выводит текст и дату (вернитесь 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 , это добавить текст MHHHRGFILE 20161001 99991231 в конце файла, в то время как мне нужно добавить его на верхнюю позицию в качестве первой позиции.

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

  • Удалить столбцы, сумма которых равна нулю
  • Построить матрицу на основе значений другой матрицы
  • Как переносить текстовый файл на основе символов
  • Как я могу получить номер этого выражения?
  • Увеличение даты в файле
  • Поиск старого классического учебника по инструментарию Unix
  • как посмотреть значение данных по индексу поиска?
  • Как использовать разрез для разделения по нескольким пробелам?
  • Добавить / Добавить столбец в качестве первого столбца в файл с разделителями табуляции
  • Найти записи, представленные в файле 1, также как в файле 2, так и в файле 3
  • Извлечь столбец из полей, разделенных пробелами, которые не выровнены
  • Найти совпадения для 5-го столбца в файлах с разделителями каналов
  • Interesting Posts

    Как ускорить X по быстрому соединению? (особенно по ssh)

    du –exclude каталоги – это возможно?

    Проблемы, связанные с дезинфекцией Linux и винной установкой

    Настройка интерфейса WLAN на Debian

    Как управлять thinkpad_acpi через procfs, RHEL 6.4

    Запуск 32-разрядного приложения в Debian Wheezy 64 бит: Отсутствующие библиотеки

    Почему команда «lspci» не перечисляет последовательные порты?

    Используя startx на Fedora 17, пользователь без полномочий root не может присоединиться к новым беспроводным сетям – как исправить?

    Неоконфликтный конфликт с автоматическим прерыванием линии в vim

    Печатать случайные строки в соответствии с порядком исходного файла

    Не удается получить vga-passthrough, работая с xen-4.5

    Настройка статических маршрутов по умолчанию с помощью RIPv2

    Может ли DNS идентифицировать имена хостов динамически, если они статически настроены?

    Конфигурация шрифта на экране?

    Почему не удается войти в мою консоль debian?

    Linux и Unix - лучшая ОС в мире.