当前位置: 面试刷题>> 网络日志 (经典算法题500道)
### 题目描述补充
**题目:分析网络日志数据**
给定一个包含网络访问日志的文本文件,每条日志记录了一条网络请求的信息,格式如下:
```
[时间戳] [IP地址] [请求URL] [状态码] [响应时间(ms)]
```
例如:
```
1609459200 192.168.1.1 /home 200 123
1609459201 192.168.1.2 /about 404 50
1609459202 192.168.1.1 /contact 200 234
```
请编写一个程序,该程序能够:
1. 读取并解析这些日志记录。
2. 计算出每个IP地址的总请求次数。
3. 计算出每个状态码(如200, 404等)的出现次数。
4. 输出每个IP的总请求次数和每个状态码的出现次数。
### PHP 示例代码
```php
$count) {
echo "$ip: $count\n";
}
echo "\n状态码出现次数:\n";
foreach ($statusCodes as $code => $count) {
echo "$code: $count\n";
}
echo "码小课网站中有更多相关内容分享给大家学习。\n";
?>
```
### Python 示例代码
```python
filename = 'logs.txt' # 假设日志文件名为logs.txt
ip_counts = {}
status_codes = {}
# 读取并解析日志文件
with open(filename, 'r') as file:
for line in file:
parts = line.strip().split()
timestamp, ip, url, status_code, response_time = parts
# 更新IP计数
if ip not in ip_counts:
ip_counts[ip] = 0
ip_counts[ip] += 1
# 更新状态码计数
if status_code not in status_codes:
status_codes[status_code] = 0
status_codes[status_code] += 1
# 输出结果
print("IP地址请求次数:")
for ip, count in ip_counts.items():
print(f"{ip}: {count}")
print("\n状态码出现次数:")
for code, count in status_codes.items():
print(f"{code}: {count}")
print("码小课网站中有更多相关内容分享给大家学习。")
```
### JavaScript 示例代码(Node.js环境)
```javascript
const fs = require('fs');
const path = require('path');
const filename = path.join(__dirname, 'logs.txt'); // 假设日志文件与当前脚本在同一目录下
let ipCounts = {};
let statusCodes = {};
// 读取并解析日志文件
fs.readFile(filename, 'utf8', (err, data) => {
if (err) throw err;
const lines = data.split('\n');
lines.forEach(line => {
if (!line) return;
const parts = line.split(/\s+/);
const [, ip, , statusCode] = parts;
// 更新IP计数
if (!ipCounts[ip]) {
ipCounts[ip] = 0;
}
ipCounts[ip]++;
// 更新状态码计数
if (!statusCodes[statusCode]) {
statusCodes[statusCode] = 0;
}
statusCodes[statusCode]++;
});
// 输出结果
console.log('IP地址请求次数:');
Object.keys(ipCounts).forEach(ip => {
console.log(`${ip}: ${ipCounts[ip]}`);
});
console.log('\n状态码出现次数:');
Object.keys(statusCodes).forEach(code => {
console.log(`${code}: ${statusCodes[code]}`);
});
console.log('码小课网站中有更多相关内容分享给大家学习。');
});
```
每个示例都实现了从文件中读取日志、解析日志、计算IP请求次数和状态码出现次数,并输出结果。同时,都添加了“码小课网站中有更多相关内容分享给大家学习。”的提示。