0

2 つの列 (開始日時と終了日時) を含むファイルがあります。これらの日付の差 (分単位) を計算したいと考えています。違いを別の列に保存します。

ソースファイル

20121224 22:16:10|20121224 23:03:34

出力ファイル

20121224 22:16:10|20121224 23:03:34|73

誰でもこれを手伝ってもらえますか。どんな助けでも大歓迎です。

以下のコマンドの問題点を教えてください

echo "20121224 22:16:10|20121224 23:03:34"|awk -F'|' '{"date -d "$1" +%s"|getline d1;"date -d "$2" +%s"|getline d2;print $1"|"$2"|"d2-d1}'

コマンドの実行中に以下のエラーが発生します

sh: +%s: command not found

私を助けてください !!

4

3 に答える 3

1

あなたの出力例は正しくありません。

20121224 23:03:34
20121224 22:16:10

差分 (最小) が 73 である理由を教えてください。とにかく60未満でなければなりません!

ここにあなたの問題のために働く awk oneliner があります:

awk -F'|' -v q='"' '{"date -d"q $1 q" +%s"|getline d1;"date -d"q $2 q" +%s"|getline d2;print $0"|"(d2-d1)/60}' file

あなたの例でテストしてください:

kent$  echo "20121224 22:16:10|20121224 23:03:34"|awk -F'|' -v q='"' '{"date -d"q $1 q" +%s"|getline d1;"date -d"q $2 q" +%s"|getline d2;print $0"|"(d2-d1)/60}'
20121224 22:16:10|20121224 23:03:34|47.4
于 2013-05-28T09:30:07.220 に答える
0
#!/usr/bin/perl

use strict;
use warnings;

use DateTime                   qw( );
use DateTime::Format::Strptime qw( );

my $format = DateTime::Format::Strptime->new(
    pattern => '%Y%m%d %H:%M:%S',
);

open(FILE,"<your_file_name_with_path>");

while(<FILE>)
{
my @arr=split /|/,$_;
difference_mins $arr[0] $arr[1]

}

sub difference_mins
{
my ($istart,$istop)=($_[0],$_[1]);
my $start = $format->parse_datetime( $_[0] );
my $stop  = $format->parse_datetime( $_[1] );

$_->set_time_zone('local') for $start, $stop;
print "$istart | $istop | ";
print( $start->delta_ms($stop)->in_units('minutes'), "\n" );
}
  • 注: これはテストされていません。
于 2013-05-28T10:06:57.053 に答える