-7

こんにちは、以下のシナリオのシェル スクリプトを作成しました。

今日のすべてのファイルを検索して読み取り、~ で区切られた 6 番目のフィールドを取得します。

================
#!/usr/bin/ksh
DATE=`date | awk '{print $2 " " $3}'`
TIMESTAMP=`date +"%m%d%Y"`
for filename in `ls -ltr | grep -i "$DATE"| awk '{print $9}'`
do
  cat $filename | grep -i ^01 | awk -F'~' '{print $6}' >> /tmp/log.$TIMESTAMP
done
================

誰かがこれに相当する perl を提供してくれませんか。

4

2 に答える 2

2

私のKornシェルは非常に錆びていますが、これでうまくいくと思います。

lsリスト内の月と日を検索するのではなく、前の午前 0 時に対して実際の変更時刻を確認する点で異なります。

use strict;
use warnings;

use File::Find 'find';
use Time::Piece 'localtime';

my $timestamp = localtime->strftime('%m%d%Y');
my $date = Time::Piece->strptime($timestamp, '%m%d%Y')->epoch;

open my $log, '>', "/tmp/log.$timestamp" or die "Unable to open log file: $!";

find(sub {
  return unless -f and (stat)[9] >= $date;
  open my $fh, '<', $_ or die qq{Unable to open "$_" for reading: $!};
  while (<$fh>) {
    chomp;
    next unless /^01/;
    print $log (split /~/)[5], "\n";
  }
}, '.');
于 2013-04-23T19:29:28.580 に答える