#! /usr/bin/env bash
########################################################
#
#
########################################################
function solution_1() {
grep "tcp" nowcoder.txt | awk '{print $6}' | sort | uniq -c | awk '{print $2,$1}' | sort -nr -k2
}
########################################################
#
#
########################################################
function solution_2() {
awk '{
if($1 = /tcp/) a[$6]++
} END {
for(k in a) {
print k,a[k]
}
}' nowcoder.txt | sort -nrk2
}
########################################################
#
#
########################################################
function solution_3() {
local condition_index=${1}
local target_index=${2}
# 构造map 目标名称作为key, 目标出现次数作为value
declare -A map
local array=""
while read line; do
array=(${line})
[[ ${array[${condition_index}]} = "tcp" ]] && ((map["${array[${target_index}]}"]++))
done < nowcoder.txt
# 取出 map的所有value 放到数组tmp中
local tmp=(${map[@]})
local size=${#tmp[@]}
local int=0
# 以下是冒泡排序算法,以降序为目的,即从大到小
for (( i = 0; i < ${size}; i++ )); do
for (( j = $i + 1; j < ${size}; j++ )); do
[[ ${tmp[$i]} -ge ${tmp[$j]} ]] && continue
int=${tmp[$i]}
tmp[i]=${tmp[$j]}
tmp[$j]=$int
done
done
# 遍历数组
for (( i = 0; i < size; i++ )); do
for va in ${!map[*]}; do
[[ ${tmp[$i]} = ${map[$va]} ]] && printf "$va ${map[$va]}\n"
done
done
}
solution_3 0 5