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" }'