SHELL1 统计文件的行数
cat nowcoder.txt | wc -l
SHELL2 打印文件的最后5行
tail -n 5 nowcoder.txt
SHELL3 输出7的倍数
seq 0 7 500
SHELL4 输出第5行的内容
sed -n '5p' nowcoder.txt
SHELL5 打印空行的行号
grep -nv '.' nowcoder.txt | cut -d ':' -f 1
SHELL6 去掉空行
grep '.' nowcoder.txt
SHELL7 打印字母数小于8的单词
for word in `cat nowcoder.txt`
do
if [ ${#word} -lt 8 ]; then
echo $word
fi
done
SHELL8 统计所有进程占用内存大小的和
total_mem=0
for mem in `awk '{print $6;}' nowcoder.txt`
do
total_mem=$[$total_mem + $mem]
done
echo $total_mem
SHELL9 统计每个单词出现的个数
awk '{ for (i = 1; i <= NF; i++) { print $i } }' nowcoder.txt | sort | uniq -c | sort -n | awk '{ print $2, $1 }'
SHELL10 第二列是否有重复
awk '{print $2}' nowcoder.txt | sort | uniq -cd | sort -n
SHELL11 转置文件的内容
num_columns=`head -n 1 nowcoder.txt | awk '{print NF}'`
for ((i = 1; i <= $num_columns; ++i))
do
cut -d ' ' -f $i nowcoder.txt | awk '{ printf $1" " }'
echo
done
SHELL12 打印每一行出现的数字个数
sed 's/[^1-5]//g' nowcoder.txt | awk -F "" '{ sum+=NF; print "line"NR" number: "NF } END { print "sum is "sum }'
SHELL13 去掉所有包含this的句子
cat | grep -v "this"
SHELL14 求平均值
sum=0
read N
for (( i = 0; i < $N; i++ ))
do
read elem
sum=$[ $sum + $elem ]
done
echo "scale=3; $sum / $N" | bc
SHELL15 去掉不需要的单词
grep -iv "b" nowcoder.txt
SHELL16 判断输入的是否为IP地址
for ip_address in `cat nowcoder.txt`
do
echo $ip_address | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]$' > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo $ip_address | grep -E '^((25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9])))\.){3}(25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9])))$' > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo yes
else
echo no
fi
else
echo error
fi
done
SHELL17 将字段逆序输出文件的每行
awk -F : '{
printf $NF
for (i = NF - 1; i >= 1; i--) {
printf ":"$i
}
printf "\n"
}' nowcoder.txt
SHELL18 域名进行计数排序处理
cut -d '/' -f 3 nowcoder.txt | sort -nr | uniq -c | sed 's/^\s*//g'
SHELL19 打印等腰三角形
for (( i = 1; i <= 5; i++ ))
do
for (( j = 5 - i; j >= 1; j-- ))
do
echo -n " "
done
for (( j = 1; j <= i; j++ ))
do
echo -n "* "
done
echo
done
SHELL20 打印只有一个数字的行
cat nowcoder.txt | grep "^[^0-9]*[0-9]\{1\}[^0-9]*$"
SHELL21 格式化输出
awk '{
first_part=length($0) % 3 ? length($0) % 3 : 3;
printf substr($0, 1, first_part);
for (i = first_part + 1; i <= length($0); i += 3) {
printf ","substr($0, i, 3);
}
printf "\n"
}' nowcoder.txt
SHELL22 处理文本
awk -F : '{
if ($1 in counter) {
counter[$1] = counter[$1]"\n"$2;
} else {
counter[$1] = $2;
}
} END {
for (key in counter) {
print "["key"]\n"counter[key];
}
}' nowcoder.txt
SHELL23 nginx日志分析1-IP统计
grep "23/Apr/2020" nowcoder.txt | awk '{print $1}' | sort | uniq -c | sort -nr | sed 's/^\s*//g'
SHELL24 nginx日志分析2-统计某个时间段的IP
grep -E '23/Apr/2020:(20|21|22|23)' nowcoder.txt | awk '{print $1}' | sort | uniq | wc -l
SHELL25 nginx日志分析3-统计访问3次以上的IP
awk '{print $1}' nowcoder.txt | sort | uniq -c | sed 's/^\s*//g' | grep -vE '^(1|2|3)\s' | sort -nr
SHELL26 nginx日志分析4-查询某个IP的详细访问情况
grep "192.168.1.22" nowcoder.txt | awk -F "GET" '{ print $2 }' | awk '{ print $1 }' | sort | uniq -c | sort -nr | sed 's/^\s*//g'
SHELL27 nginx日志分析5-统计爬虫抓取404的次数
grep "Baiduspider" nowcoder.txt | grep "404" | wc -l
SHELL28 nginx日志分析6-统计每分钟的请求数
cut -d ' ' -f 4 nowcoder.txt | cut -d ':' -f '2,3' | sort | uniq -c | sort -nr | sed 's/^\s*//g'
SHELL29 netstat练习1-查看各个状态的连接数
grep "tcp" nowcoder.txt | awk '{print $6}' | sort | uniq -c | sort -nr | awk '{print $2, $1}'
SHELL30 netstat练习2-查看和3306端口建立的连接
grep -E ":3306\s+ESTABLISHED" nowcoder.txt | awk '{print $5}' | cut -d ':' -f 1 | sort | uniq -c | sort -nr | sed 's/^\s*//g'
SHELL31 netstat练习3-输出每个IP的连接数
grep "tcp" nowcoder.txt | awk '{print $5}' | cut -d ':' -f 1 | sort | uniq -c | sort -nr | awk '{print $2, $1}'
SHELL32 netstat练习4-输出和3306端口建立连接总的各个状态的数目
echo -n "TOTAL_IP "
grep "3306" nowcoder.txt | awk '{print $5}' | cut -d ':' -f 1 | sort | uniq | wc -l
echo -n "ESTABLISHED "
grep "3306" nowcoder.txt | grep "ESTABLISHED" | wc -l
echo -n "TOTAL_LINK "
grep "3306" nowcoder.txt | wc -l
SHELL33 业务分析-提取值
cat nowcoder.txt | while read line
do
echo $line | awk -F "org.apache.catalina.startup.VersionLoggerListener.log" '{
if ($2 ~ "Server version") {
print "serverVersion:"substr($2, index($2, ":") + 1)
} else if ($2 ~ "Server number") {
print "serverName:"substr($2, index($2, ":") + 1)
} else if ($2 ~ "OS Name") {
split($2, parts, ", ")
print "osName:"substr(parts[1], index(parts[1], ":") + 1)
print "osVersion:"substr(parts[2], index(parts[2], ":") + 1)
}
}'
done
SHELL34 ps分析-统计VSZ,RSS各自总和
tail -n +2 nowcoder.txt | awk '{ vsz += $5; rss += $6; } END { print "MEM TOTAL\nVSZ_SUM:"vsz/1024"M,RSS_SUM:"rss/1024"M" }'