下午好,我为下面的场景编写了一个shell脚本:
查找今天的所有文件并阅读这些文件并将第六个字段分隔为〜
================
#!/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。
答案 0 :(得分:2)
我认为这可以解决问题,尽管我的Korn外壳非常生锈。
它的不同之处在于检查实际修改时间与上一个午夜相比,而不是在ls
列表中搜索月份和日期。
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";
}
}, '.');
答案 1 :(得分:-2)
open KSH, "| /usr/bin/ksh";
print KSH <<'EOF';
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
EOF
close KSH;
其他任何东西都不相同。