1.实验任务
1、用bash编写一个文本批处理脚本,对以下2014世界杯运动员数据(点击下载文件)附件分别进行批量处理完成相应的数据统计任务:
统计不同年龄区间范围(20岁以下、[20-30]、30岁以上)的球员数量、百分比
统计不同场上位置的球员数量、百分比
名字最长的球员是谁?名字最短的球员是谁?
年龄最大的球员是谁?年龄最小的球员是谁?
analyze_player.sh(先在自己宿主机创建一个脚本文件)
#!/bin/bash
# 设置输入文件
input_file="worldcupplayerinfo.tsv"
# 1. 统计不同年龄区间的球员数量和百分比
echo "=== 年龄分布统计 ==="
total_players=$(wc -l < "$input_file")
echo "总球员数: $total_players"
echo -e "\n年龄区间分布:"
awk -F'\t' '
BEGIN {
under20=0
age20to30=0
over30=0
}
$6 ~ /^[0-9]+$/ && $6 > 0 { # 确保年龄是有效的数字
if($6 < 20) under20++
else if($6 <= 30) age20to30++
else over30++
}
END {
printf "20岁以下: %d (%.2f%%)\n", under20, (under20/NR)*100
printf "20-30岁: %d (%.2f%%)\n", age20to30, (age20to30/NR)*100
printf "30岁以上: %d (%.2f%%)\n", over30, (over30/NR)*100
}' "$input_file"
# 2. 统计不同位置的球员数量和百分比
echo -e "\n=== 位置分布统计 ==="
awk -F'\t' '
{
position[$5]++
}
END {
for(pos in position)
printf "%s: %d (%.2f%%)\n", pos, position[pos], (position[pos]/NR)*100
}' "$input_file" | sort
# 3. 找出名字最长和最短的球员
echo -e "\n=== 名字长度统计 ==="
awk -F'\t' '
BEGIN {
max_len = 0
min_len = 999
max_name = ""
min_name = ""
}
{
name_len = length($9)
if(name_len > max_len) {
max_len = name_len
max_name = $9
}
if(name_len < min_len) {
min_len = name_len
min_name = $9
}
}
END {
printf "名字最长的球员: %s (长度: %d)\n", max_name, max_len
printf "名字最短的球员: %s (长度: %d)\n", min_name, min_len
}' "$input_file"
# 4. 找出年龄最大和最小的球员
echo -e "\n=== 年龄统计 ==="
awk -F'\t' '
BEGIN {
max_age = 0
min_age = 999
max_name = ""
min_name = ""
}
$6 ~ /^[0-9]+$/ && $6 > 0 { # 确保年龄是有效的数字
if($6 > max_age) {
max_age = $6
max_name = $9
}
if($6 < min_age) {
min_age = $6
min_name = $9
}
}
END {
printf "年龄最大的球员: %s (%d岁)\n", max_name, max_age
printf "年龄最小的球员: %s (%d岁)\n", min_name, min_age
}' "$input_file"
2、用bash编写一个文本批处理脚本,对以下Web服务器访问日志(点击下载文件)附件分别进行批量处理完成相应的数据统计任务:
统计访问来源主机TOP 100和分别对应出现的总次数
统计访问来源主机TOP 100 IP和分别对应出现的总次数
统计最频繁被访问的URL TOP 100
统计不同响应状态码的出现次数和对应百分比
分别统计不同4XX状态码对应的TOP 10 URL和对应出现的总次数
给定URL输出TOP 100访问来源主机
analyze_web_log.sh(先在自己宿主机创建一个脚本文件)
#!/bin/bash
function HELP
{
echo "usage:[-s][-i][-u][-c][-e][-o][-h]"
echo " -s 统计访问来源主机TOP 100和分别对应出现的总次数"
echo " -i 统计访问来源主机TOP 100 IP和分别对应出现的总次数"
echo " -u 统计最频繁被访问的URL TOP 100"
echo " -c 统计不同响应状态码的出现次数和对应百分比"
echo " -e 分别统计不同4XX状态码对应的TOP 10 URL和对应出现的总次数"
echo " -o [url] 给定URL输出TOP 100访问来源主机"
echo " -h 查看帮助文档"
}
function Operate
{
case $1 in
1) sed -n '2, $ p' web_log.tsv | awk -F '\t' '{a[$1]++} END{for(i in a) {print (i,a[i])}}' | sort -nr -k2 | head -n 100
;;
2) sed -n '2, $ p' web_log.tsv | awk '{if ($1~/^([0-2]*[0-9]*[0-9])\.([0-2]*[0-9]*[0-9])\.([0-2]*[0-9]*[0-9])\.([0-2]*[0-9]*[0-9])$/){print $1}}' | awk -F '\t' '{a[$1]++} END{for(i in a) {print (i,a[i])}}' | sort -nr -k2 | head -n 100
;;
3) sed -n '2, $ p' web_log.tsv | awk -F '\t' '{a[$5]++} END{for(i in a) {print (i,a[i])}}' | sort -nr -k2 | head -n 100
;;
4) sed -n '2, $ p' web_log.tsv | awk -F '\t' 'BEGIN{ans=0}{a[$6]++;ans++} END{for(i in a) {printf "%d\t%d\t%.3f%%\n", i, a[i], a[i]*100/ans}}' | sort -n
;;
5) sed -n '2, $ p' web_log.tsv | awk -F '\t' '{if($6~/^4+[0-9]*[0-9]$/) {a[$5]++}} END{for (i in a) {print i,a[i]}}' | sort -nr -k2 | head -n 10
;;
6) sed -n '2, $ p' web_log.tsv | awk -F '\t' '{if($5=="'$2'") {a[$1]++}} END{for (i in a) {print i,a[i]}}' | sort -nr -k2 | head -n 100
;;
esac
}
function main
{
ans=0
var=($*)
if [ ${#var[@]} -ge 1 ];then
for j in "${var[@]}";
do
case $j in
"-o") ans=$((ans+1))
Operate 6 "${var["$ans"]}"
;;
"-s") Operate 1
;;
"-i") Operate 2
;;
"-u") Operate 3
;;
"-c") Operate 4
;;
"-e") Operate 5
;;
"-h") HELP
;;
esac
ans=$((ans+1))
done
else
HELP
fi
}
main $1 $2 $3 $4 $5 $6 $7
2.实验步骤
1、下载工具包,宿主机虚拟机互传文件
先下载open-vm-tools、open-vm-tools-desktop工具包,下载完成后重启虚拟机
apt install open-vm-tools open-vm-tools-desktop
下载完工具包后,就可以将宿主机的文件直接复制粘贴到ubuntu虚拟机中
open-vm-tools
:VMware 虚拟机的工具,提供虚拟机与主机交互功能,比如共享文件夹、调整屏幕分辨率。
open-vm-tools-desktop
:桌面环境扩展,支持更多图形相关功能,比如拖拽文件、自动调整显示。
将我们的脚本文件以及被检索的文件放在同一个文件夹里面,然后复制该文件夹
然后进入ubuntu虚拟机,鼠标右键,点击Paste,然后文件就可以直接被复制到虚拟机
如果出现以下窗口,点Skip All即可,没有则不用理会
然后基于该文件夹打开终端,鼠标放在文件夹处然后右键,点Open in Terminal
2、对于用bash编写一个文本批处理脚本,对以下2014世界杯运动员数据附件分别进行批量处理完成相应的数据统计任务:
chmod +x analyze_player.sh //为 analyze_player.sh 文件添加执行权限
./analyze_player.sh
3、对于用bash编写一个文本批处理脚本,对以下Web服务器访问日志附件分别进行批量处理完成相应的数据统计任务:
同理
chmod +x analyze_web_log.sh
./analyze_web_log.sh
bash analyze_web_log.sh -s
bash analyze_web_log.sh -i
bash analyze_web_log.sh -u
bash analyze_web_log.sh -c
bash analyze_web_log.sh -e
bash analyze_web_log.sh -o /shuttle/missions/sts-68/ksc-upclose.gif