将sh脚本转换为perl脚本

时间:2013-04-23 18:59:41

标签: perl

下午好,我为下面的场景编写了一个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。

2 个答案:

答案 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;

其他任何东西都不相同。