0

我有一些带有以下条目的文本文件:

Name  type  startTime   Endtime    comments
my   I      01-03-2016  02-03-2016 zoom
my   F     01-03-2016  02-03-2016  zoom2
abd   F     03-03-2016  04-03-2016  zoom5
my   I      01-03-2016  02-03-2016 zoom6 

如果当前日期是 3 月 18 日:输出应该是: 输出:

Name  type  startTime   Endtime    comments
my   I      **02-03-2016**  ***18-03-2016*** zoom
my   F     01-03-2016  02-03-2016  zoom2
abd   F     03-03-2016  04-03-2016  zoom5
my   I      **02-03-2016**  ***18-03-2016*** zoom6 

然后条件If name == my && type ==I需要使用结束时间更新开始时间 - 结束时间将是处理的当前日期:

任何人都可以帮助我选择最佳方法来处理具有上述要求的文件。

我希望我的要求被清除:) 谢谢,Madhu

4

2 回答 2

1

您可以在 shell 脚本中执行此操作:

  1. 读取文件的每一行
  2. 环形
  3. 使用 cut 命令读取必填字段值
  4. if condition检查字段的值nametype
  5. 使用sed命令更新starttimeendtime字段的值
于 2016-03-18T08:58:21.793 回答
1

纯 Perl 解决方案看起来像

#!/usr/bin/env perl

use strict;
use warnings;

open(my $fh, "<", "file.txt") || die $!;
my ($header, @lines) = <$fh>;
close($fh);

my @keys = split(/[\s\t]+/, $header);

open($fh, ">", "file.txt") || die $!;
print $fh join("\t",@keys), "\n";

my @cdate = (localtime)[3,4,5];
$cdate[1] += 1;
$cdate[2] += 1900;

foreach my $line (@lines) {
    my %tmp;
    @tmp{@keys} = split(/[\s\t]+/, $line);
    if($tmp{'Name'} eq 'my' && $tmp{'type'} eq 'I') {
        $tmp{'Endtime'} = sprintf("%02d-%02d-%04d", @cdate)
    }

    print $fh join("\t", @tmp{@keys} ),"\n"
}

close($fh)
于 2016-03-18T09:13:11.673 回答