牛客网在线编程SHELL篇

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值