1、统计文件的行数
cat nowcoder.txt | wc -l
grep -c '' nowcoder.txt
sed -n '$=' nowcoder.txt
awk 'END{print NR}' nowcoder.txt
2、打印文件的最后5行
tail -n 5 nowcoder.txt
tail -5 nowcoder.txt
3、输出7的倍数
写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21…)的命令
seq 0 7 500
seq 0 500 | awk '$0%7==0{print $0}'
for (( i= 0 ; i<= 500 ; i++ )) ; do
if [ $(( $i% 7 )) -eq 0 ] ; then
echo $i
fi
done
[ hadoop1@hadoop1 test] $ bash ./a.sh
4、输出第5行的内容
[ hadoop1@hadoop1 test] $ sed -n '5p' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk 'NR==5' nowcoder.txt
5、打印空行的行号
[ hadoop1@hadoop1 test] $ grep -n '^$' nowcoder.txt
[ hadoop1@hadoop1 test] $ grep -n '^$' nowcoder.txt | awk -F: '{print $1}'
[ hadoop1@hadoop1 test] $ sed -n '/^$/=' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk '/^$/{print NR}' nowcoder.txt
6、去掉空行
[ hadoop1@hadoop1 test] $ sed -n '/^$/!p' nowcoder.txt
[ hadoop1@hadoop1 test] $ grep -v '^$' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk NF nowcoder.txt
7、打印字母数小于8的单词
[ hadoop1@hadoop1 test] $ awk '{for(i=1;i<=NF;i++)if(length($i)<8)print $i}' nowcoder.txt
8、统计所有进程占用内存大小的和
[ hadoop1@hadoop1 test] $ awk '{sum+=$6}END{print sum}' nowcoder.txt
9、统计每个单词出现的个数
[ hadoop1@hadoop1 test] $ awk '{for(i=1;i<=NF;i++)array[$i]++}END{for(i in array)print i,array[i]}' nowcoder.txt
10、第二列是否有重复
[ hadoop1@hadoop1 test] $ awk '{array[$2]++}END{for(i in array)if(array[i]>=2)print i}' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk '{array[$2]++}END{for(i in array)print i,array[i]}' nowcoder.txt
java 2
go 3
c 1
shell 1
php 1
c++ 1
python 1
[ hadoop1@hadoop1 test] $ awk '{array[$2]++}END{for(i in array)if(array[i]>=2)print array[i],i}' nowcoder.txt
2 java
3 go
11、转置文件的内容
[ hadoop1@hadoop1 test] $ awk '{a=(a""$1" ");b=(b""$2" ")}END{print a"\n"b}' s.txt
a = $( cat s.txt | awk '{print $1}' )
b = $( cat s.txt | awk '{print $2}' )
echo $a
echo $b
[ hadoop1@hadoop1 test] $ ./s.sh
[ hadoop1@hadoop1 test] $ awk '{a=(a""$1" ");b=(b""$2" ")}END{print a"\n"b}' s.txt | awk '{a=(a""$1" ");b=(b""$2" ");c=(c""$3" ");d=(d""$4" ")}END{print a"\n"b"\n"c"\n"d}'
job salary
c++ 13
java 14
php 12
12、打印每一行出现的数字个数
[ hadoop1@hadoop1 test] $ awk -F"[1-5]" '{print "line"NR " " "number:"NF-1;sum+=(NF-1)}END{print "sum is "sum"}' nowcoder.txt
BEGIN{
sum = 0
}
{
print "line" NR " " "number:" NF-1
sum += ( NF-1)
}
END{
print "sum is " sum
}
[ hadoop1@hadoop1 test] $ awk -F"[1-5]" -f nowcoder.awk nowcoder.txt
13、去掉所有包含this的句子
[ hadoop1@hadoop1 test] $ grep -v 'this' nowcoder.txt
[ hadoop1@hadoop1 test] $ sed -n '/this/!p' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk '$0!~/this/{print $0}' nowcoder.txt
14、求平均值
[ hadoop1@hadoop1 test] $ awk 'NR>=2{sum+=$1}END{printf "%.3f\n",sum/(NR-1)}' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk 'NR==1{N=$1}NR>=2{sum+=$1}END{printf "%.3f\n",sum/N}' nowcoder.txt
15、去掉不需要的单词
去掉输入中的含有B和b的单词。输入格式:一行一个单词;输出格式 :将所有单词放入一行中
[ hadoop1@hadoop1 test] $ grep -v '[Bb]' s.txt
nowcoder
test
[ hadoop1@hadoop1 test] $ sed -n '/[Bb]/!p' s.txt
nowcoder
test
[ hadoop1@hadoop1 test] $ awk '$0!~/[Bb]/{a=a""$0" "}END{print a}' s.txt
nowcoder test
16、判断输入的是否为IP地址
写一个脚本统计文件nowcoder.txt中的每一行是否是正确的IP地址。 如果是正确的IP地址输出:yes;如果是错误的IP地址,四段号码的话输出:no,否则的话输出:error 思路: 以“.”分割ip;ip地址四个段范围都是在0—255间的;若没有四段号码,则为error;若有四段号码但四个值不在[0,255]之间,则为no;否则为yes。
#!/bin/awk -f
{
if( NF!= 4 )
print "error"
elif (( $1 >= 0 && $1 <= 255 ) && ( $2 >= 0 && $2 <= 255 ) && ( $3 >= 0 && $3 <= 255 ) && ( $4 >= 0 && $4 <= 255 ))
print "yes"
else
print "no"
}
[ hadoop1@hadoop1 test] $ awk -F"." -f a.awk nowcoder.txt
17、将字段逆序输出文件的每行
将字段逆序输出文件nowcoder.txt的每一行,其中每一字段都是用英文冒号: 相分隔。
#!/bin/awk -f
{
for( i= NF; i>= 1 ; i--) {
if ( i== 1 ) {
print $1
break ;
}
printf( $i ":" )
}
}
18、域名进行计数排序处理
假设我们有一些域名,存储在nowcoder.txt里,现在需要你写一个脚本,将域名取出并根据域名进行计数排序处理。网址:http://www.nowcoder.com/index.html;域名:www.nowcoder.com
[ hadoop1@hadoop1 test] $ awk -F"/" '{array[$3]++}END{for (i in array) print array[i],i}' s.txt | sort -rnk1
19、打印等腰三角形
[ hadoop1@hadoop1 test] $ awk '{
for(i=5;i>0;i--){
str="";
for(j=i-1;j>0;j--) str=str OFS;
for(j=0;j<6-i;j++) str=str "*" OFS;
print str;
}
}'
20、打印只有一个数字的行
[ hadoop1@hadoop1 test] $ awk -F "[0-9]" '(NF==2||NF==0){print $0}' nowcoder.txt
21、格式化输出
[ hadoop1@hadoop1 test] $ cat s.txt | xargs -n1 printf "%'d\n "
22、处理文本
[ hadoop1@hadoop1 test] $ awk -F ":" '{
res[$1] = (res[$1] == "" ? $2 : (res[$1] "\n" $2))
}END{
for(k in res){
print "["k"]"
print res[k]
}
}' nowcoder.txt
23、nginx日志分析1-IP统计
现在需要你统计出2020年4月23号的访问ip次数,并且按照次数降序排序。 日志样式:192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] “GET /1/index.php HTTP/1.1” 404 490 “-” “Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0” 输出格式: 5 192.168.1.22 (次数 ip)
[ hadoop1@hadoop1 test] $ awk '/(23\/Apr\/2020)/{array[$1]++}END{for(i in array) print(array[i],i)}' nowcoder.txt | sort -rnk1
24、nginx日志分析2-统计某个时间段的IP
现在你需要统计2020年04月23日20-23点的去重IP访问量 思路:范围筛选时间,利用数组对ip分组计数达到去重效果,最后输出数组长度 小问题:20—23点包含23点整吗? 不包含的话正则就可以到22ok了 否则还还要匹配23:00:00
[ hadoop1@hadoop1 test] $ awk '/(23\/Apr\/2020:20)/,/(23\/Apr\/2020:22)/{array[$1]++}END{print(length(array))}' nowcoder.txt
[ hadoop1@hadoop1 test] $ awk -r '/(23\/Apr\/2020:20)/,/(23\/Apr\/2020:22)/{print($1)}' nowcoder.txt | sort | uniq | wc -l
25、nginx日志分析3-统计访问3次以上的IP
[ hadoop1@hadoop1 test] $ awk '{array[$1]++}END{for(i in array)if(array[i]>3)print(array[i],i)}' nowcoder.txt | sort -rnk1
26、nginx日志分析4-查询某个IP的详细访问情况
需要你查询192.168.1.22的详细访问情况,按访问频率降序排序 输出格式:4 /1/index.php (次数 网址)
[ hadoop1@hadoop1 test] $ awk '/192.168.1.22/{array[$7]++}END{for(i in array)print(array[i],i)}' nowcoder.txt| sort -rnk1
27、nginx日志分析5-统计爬虫抓取404的次数
需要你统计百度爬虫抓取404的次数 思路:两个条件 :百度和404
[ hadoop1@hadoop1 test] $ awk '/http:\/\/www.baidu.com/&&$9==404' nowcoder.txt | wc -l
[ hadoop1@hadoop1 test] $ grep -E 'http:\/\/www.baidu.com' nowcoder.txt | grep '404' | wc -l
[ hadoop1@hadoop1 test] $ sed -n '/http:\/\/www.baidu.com/{/404/p}' nowcoder.txt | wc -l
[ hadoop1@hadoop1 test] $ grep -E 'http:\/\/www.baidu.com' nowcoder.txt | grep -c '404'
28、nginx日志分析6-统计每分钟的请求数
现在需要你统计每分钟的请求数,并且按照请求数降序排序
[ hadoop1@hadoop1 test] $ sed -r 's/^.*[0-9]{4}:([0-9]{2}:[0-9]{2}):[0-9]{2}.*$/\1/g' nowcoder.txt | awk '{array[$1]++}END{for(i in array)print(array[i],i)}' | sort -rnk1
[ hadoop1@hadoop1 test] $ awk -F":" 'a=$2":"$3{array[a]++}END{for(i in array)print(array[i],i)}' nowcoder.txt | sort -rnk1
29、netstat练习1-查看各个状态的连接数
需要你查看系统tcp连接中各个状态的连接数,并且按照连接数降序输出
awk '$1=="tcp"{array[$6]++}END{for(i in array)print(i,array[i])}' nowcoder.txt | sort -rnk2
30、netstat练习2-查看和3306端口建立的连接
需要你查看和本机3306端口建立连接并且状态是established的所有IP,按照连接数降序排序
[ hadoop1@hadoop1 test] $ cat nowcoder.txt | grep '3306.*ESTABLISHED' | awk '{print $5}' | awk -F":" '{array[$1]++}END{for(i in array)print(array[i],i)}' | sort -rnk1
31、netstat练习3-输出每个IP的连接数
awk '$1=="tcp"{print $5}' nowcoder.txt| awk -F: '{array[$1]++}END{for(i in array)print(i,array[i])}' | sort -rnk2
32、netstat练习4-输出和3306端口建立连接总的各个状态的数目
输入格式:tcp 0 0 172.16.56.200:41856 172.16.34.144:3306 ESTABLISHED 输出格式:TOTAL_IP 3 \n ESTABLISHED 20 \n TOTAL_LINK 20 思路:输出的是ip数,state总数及各个state数 只需第五列和第六列即可,同时将这两列按:分割输出;按:分割数据产生3列(ip 端口 state),分别对ip和state数组分组计数;最后简单计算循环输出即可
awk '$5~/3306/{print $5":"$6}' nowcoder.txt| awk -F"[:]+"
'
{ip[$1]++;state[$3]++}
END{
{print("TOTAL_IP",length(ip))}
for (i in state)
print(i,state[i])
for (i in ip)
sum+=ip[i]
print("TOTAL_LINK",sum)
}
'
33、业务分析-提取值
awk -F "[:,]" '{
if($0~"Server version"){
print "serverVersion:" $4;
}
if($0~"Server number"){
print "serverName:" $4;
}
if($0~"OS Name"){
print "osName:" $4;
}
if($0~"OS Version"){
print "osVersion:" $6
}
}'
34、ps分析-统计VSZ,RSS各自总和
[ hadoop1@hadoop1 test] $ awk
'NR>1
{vsz_sum+=$5;rss_sum+=$6}
END{
print("MEM TOTAL" "\n" "VSZ_SUM:" vsz_sum/1024"M" ",RSS_SUM:" rss_sum/1024"M")
}
' nowcoder.txt