-5

我的问题标题没有完全概述我的问题。我有一个文本文件,其中包含多行数据,每行采用以下格式:

a, 日期, b, c, d, 用户名, e, 描述

a、b、c、d 和 e 不需要用于任何事情。

笔记:

  • 日期采用这种格式 -> 2013-04-07T22:23:58Z(不需要“T22:23:58Z”)
  • 描述是登录、注销或扩展
  • 相同的用户名将在整个文件中多次出现

我需要编写一个代码,该代码将从文本文件中获取数据,并输出用户当天扩展了哪些用户以及扩展了多少次。

文本文件示例:

a,2013-04-07T22:23:58Z,b,c,d,约翰,扩展
a,2013-04-07T22:23:51Z,b,c,d,约翰,登录
a,2013-07-07T22:23:51Z,b,c,d,约翰,扩展
a,2013-04-07T22:23:58Z,b,c,d,标记,扩展
a,2013-03-07T22:23:51Z,b,c,d,坦率,登录
一个,2013-07-11T22:23:51Z,b,c,d,约翰,扩展

示例输出:

2013-04-07:
约翰-> 1 扩展
标记 -> 1 扩展

2013-07-07:
约翰-> 1 扩展

2013-07-11:
约翰-> 1 扩展

有人可以向我解释,或者更好地告诉我如何做到这一点?

4

2 回答 2

0

不是您真正需要的语言,但这是 awk 中的解决方案:)

#!/bin/awk
BEGIN {
  FS=",";
}
/extend/{
    split($2,date,"T");
    dates[date[1],$6]++;
}
END {
  last = ""
  n = asorti(dates, dest)
  for (i = 1; i <= n; i++) {
    split(dest[i], idx, SUBSEP)
    if ( last != idx[1]) {
      last = idx[1]
      print "\n"idx[1]
    }
    print idx[2] " -> " dates[idx[1], idx[2]] " extend"
  }
}
于 2013-05-14T19:00:27.643 回答
0

和另一个不是您所需语言的解决方案.. PHP ;)

<?php

$handle = fopen("php://stdin", "r");
$dates = array();

while (!feof($handle)) { 
    $data = explode(',', stream_get_line($handle, 200, "\n"));
    if (trim($data[6])=='extend') {
      @$dates[strstr($data[1], 'T', true)][$data[5]]++;
    }
} 

arsort($dates);

foreach ($dates as $date => $users) {
  echo $date;

  foreach ($users as $user => $times)
    echo "\n$user -> $times extend";

  echo '\n\n';
}

?>

像这样在控制台中使用:./script.php < input.txt

于 2013-05-14T19:26:34.243 回答