我的问题标题并未完全概述我的问题。我有一个文本文件,其中包含多行数据,每行包含以下格式:
a, date, b, c, d, Username, e, Description
a,b,c,d和e不需要用于任何事情。
注意:
我需要编写一个代码来获取文本文件中的数据,然后输出当天用户扩展的次数和次数。
文本文件示例:
a,2013-04-07T22:23:58Z,b,c,d,john,extend a,2013-04-07T22:23:51Z,b,c,d,john,login a,2013-07-07T22:23:51Z,b,c,d,john,extend a,2013-04-07T22:23:58Z,b,c,d,mark,extend a,2013-03-07T22:23:51Z,b,c,d,frank,login a,2013-07-11T22:23:51Z,b,c,d,john,extend
示例输出:
2013-04-07: john -> 1 extend mark -> 1 extend 2013-07-07: john -> 1 extend 2013-07-11: john -> 1 extend
有人可以向我解释,或者更好地告诉我如何做到这一点?
答案 0 :(得分: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"
}
}
答案 1 :(得分: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&lt; input.txt中