私はSolarisオペレーティングシステムを使用しています。使用している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(システム日付 - 9ヶ月の最初の日)99991231
中間部分(sysdate - 9月の最初の日)の場合、例:今日の日付は2017年7月26日で、9ヶ月とその月の最初の日を除く必要があります。つまり、20161001を印刷する必要があります。
基本的に私は次のように書くでしょう:
MHHHRGFILE 20161001 99991231
ファイルの最初の行に移動します。test.txt
ここで MHHHRGFILE と 99991231 は変更されません。
ベストアンサー1
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)))
クッシュ 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
それはすべてです。