次の形式のテストファイルがあります。ユーザーがデータベースからロックされたときのusername_dateが含まれています。kshを使用して行から名前と日付を解析し、日付が50日より古い場合は行を削除します。
$ cat lockedusers.txt
TEST1_21062016
TEST2_02122015
TEST3_01032016
TEST4_01042016
$
私はkshスクリプトを作成しています。この難しいシナリオには、私のレベルのスクリプト作成に直面しています。私は何をしたいのです:
- この行の日付の値がより古い50日、
- であれば、例えば、アンダースコア文字の前までのラインを読み
- 、テキストファイルから行を読みますTEST1を変数
- に入力し、この行を削除します。
この変数は、データベースからユーザーを削除するために使用されます。どんな助けもありがとう。
これは、コードの書き込みサービスではありませんが、ここではカップルのヒントがあります:1)変数にご入力ラインを分離するためにIFSを使用します。 2) 'date -d '50日前に '+%Y%m%d'を使用して算術比較を行い、論理を決定します。入力として使用しているファイルから行を削除すると問題が発生する可能性があるので、代わりに残したい行を別のファイルに保存して、完了したら元のファイルを置き換えることができます。 – twalberg
ようこそスタックオーバーフロー。すぐに[バージョン情報]ページをお読みください。何を試しましたか?あなたは直面している問題は何ですか?日付の書式は何ですか(おそらくddmmyyyyですが、yyyymmddを使用する方がよいでしょうが、好ましくは句読点付きです)。あなたは50日間の差をどのように計算するのですか?あなたはどのUnix版を使用していますか?あなたはGNUの 'date'コマンドを利用できますか?あなたはPerlを利用できますか? [Date :: Calc](http://search.cpan.org/perldoc?Date%3A%3ACalc)のようなPerlモジュールをインストールできますか? –
[twalberg](http://stackoverflow.com/users/1253222/twalberg)の[コメント](http://stackoverflow.com/questions/38211373/ksh-parse-line-before-underscroe-character) -into-a-variable-then-remove-this-line#comment63847531_38211373)は、GNU 'date'の存在を前提としていて、なぜ有用かを示しています。 GNU 'date'を使わないで計算を行うのはかなり困難です。 –