我有一个 csv 文件位于 /NAS/Target 位置,格式如下:
Scorecard_Name,Path,FileName,Time_Interval_HRS
Scorecard_LDO_cust_BTS,"/NAS/data/Bank_SEN",Cust.EXT,12
Scorecard_LDO_Bank_BTS,"/NAS/data/Bank_SEN",Bank.EXT,6
此 csv 文件包含所有记分卡作业的详细信息以及触发此作业的文件详细信息。文件扩展名可以是 .EXT 或 .txt
我想检查文件 cust.ext、Bank.ext 和 csv 中任何其他文件的时间戳,并根据定义的间隔 (Interval_HRS) 字段确定文件是旧的还是新的。
另外,我想将输出重定向到另一个带有记分卡名称和标志(旧的或新的)的文件。
我是 UNIX 新手,目前正在探索实现它的方法。如果我发现任何有用的东西,我会发布我的努力。任何帮助表示赞赏!
答案1
我会用perl
:
perl -MText::CSV -le '
$csv = Text::CSV->new ({ binary => 1});
$csv->getline(STDIN); # skip input header
$csv->print(*STDOUT, ["Scorecard_Name", "Status"]);
while($row = $csv->getline(STDIN)) {
$file = "$row->[1]/$row->[2]";
$age = -M $file; # in days
if (defined($age)) {
$status = $age * 24 < $row->[3] ? "new" : "old";
} else {
$status = "unknown"; # file not there or not accessible
}
$csv->print(*STDOUT, [$row->[0], $status])
}' < /NAS/Target/file.csv > result.csv