用shell awk解决所有牛客网-SHELL篇练习问题
Posted EbowTang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用shell awk解决所有牛客网-SHELL篇练习问题相关的知识,希望对你有一定的参考价值。
本文将用shell awk解决所有牛客网-SHELL篇练习问题,无论该问题是否适合使用awk,
目的在于强化、熟练,拓展运用awk
本文参考自自我总结的:shell三剑客-awk总结_EbowTang的博客-CSDN博客
如果该问题实在太简单了,尽可能采用多种方式实现,本文长期更新
描述1,统计文件的行数
写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数
示例:
假设 nowcoder.txt 内容如下:
#include <iostream>
using namespace std;
int main()
int a = 10;
int b = 100;
cout << "a + b:" << a + b << endl;
return 0;
你的脚本应当输出:
9
#! /bin/bash
1
awk 'END print NR' #NR就是行数的代表
2
awk 'count = count + 1END print count' #awk的计数功能
3
awk 'length($0) > 0 count = count + 1 END print count'#awk的模式-动作,条件计数功能
4
awk 'NF > 0 count = count + 1 END print count' #NF就是该行的字段数
描述2,打印文件最后五行
经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowcoder.txt中的最后5行
示例:
假设 nowcoder.txt 内容如下:
#include<iostream>
using namespace std;
int main()
int a = 10;
int b = 100;
cout << "a + b:" << a + b << endl;
return 0;
#! /bin/bash
1
tail -5 $1
2
tailf -n -5 $1
3
tail -n 5 $1
4
#! /bin/bash
awk ' line[NR] = $0 \\
END i = NR - 4
while(i <= NR)
print line[i]
i = i + 1
' $1
5
awk 'NR>=4print $0' nowcoder.txt
描述3,打印7的倍数
写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21...)的命令
#! /bin/bash
awk '
for(i=0;i<=500;i=i+1)
if(i % 7 == 0)
print i
'
描述4,输出第五行的内容
写一个 bash脚本以输出一个文本文件 nowcoder.txt 中第5行的内容。
示例:
假设 nowcoder.txt 内容如下:
welcome
to
nowcoder
this
is
shell
code你的脚本应当输出:
is
#! /bin/bash
awk 'NR==5print $0'
描述5,打印空行的行号
写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始
示例:
假设 nowcoder.txt 内容如下:
a
bc
d
e
f
#! /bin/bash
awk 'NF == 0print NR'
描述6,去掉文件中的空行
写一个 bash脚本以去掉一个文本文件 nowcoder.txt中的空行
示例:
假设 nowcoder.txt 内容如下:abc 567 aaa bbb ccc
你的脚本应当输出:
abc
567
aaa
bbb
ccc
#! /bin/bash
1
awk 'NF == 0 next print $0'
2
awk 'NF > 0 print $0'
描述7,统计单词长度小于8的单词
写一个 bash脚本以统计一个文本文件 nowcoder.txt中字母数小于8的单词。
示例:
假设 nowcoder.txt 内容如下:
how they are implemented and applied in computer
你的脚本应当输出:
how
they
areand
applied
in
说明:
不要担心你输出的空格以及换行的问题
#! /bin/bash
#$1代表该行第一个字段
#NF代表列数
#根据本题来看,无需模式匹配,直接判断
awk 'for(i=1;i<=NF;i++) \\
if (length($i) <8)
print $i
'
描述8,统计进程占用多少内存
假设 nowcoder.txt 内容如下:
root 2 0.0 0.0 0 0 ? S 9月25 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< 9月25 0:00 [kworker/0:0H]
web 1638 1.8 1.8 6311352 612400 ? Sl 10月16 21:52 test
web 1639 2.0 1.8 6311352 612401 ? Sl 10月16 21:52 test
tangmiao-pc 5336 0.0 1.4 9100240 238544 ?? S 3:09下午 0:31.70 /Applications
以上内容是通过ps aux | grep -v 'RSS TTY' 命令输出到nowcoder.txt文件下面的
请你写一个脚本计算一下所有进程占用内存大小的和:
#! /bin/bash
awk 'memuse = memuse + $6 END print memuse'
描述14 求平均值
写一个bash脚本以实现一个需求,求输入的一个的数组的平均值
第1行为输入的数组长度N
第2~N行为数组的元素,如以下为:
数组长度为4,数组元素为1 2 9 8
示例:
4
1
2
9
8
那么平均值为:5.000(保留小数点后面3位)
你的脚本获取以上输入应当输出:
5.000
#! /bin/bash
awk 'NR == 1 next sum=sum+$NF END val = sum/(NR-1); printf("%.3f\\n",val) '
描述13 去掉所有包含this的语句
写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出
示例:
假设输入如下:
that is your bag
is this your bag?
to the degree or extent indicated.
there was a court case resulting from this incident
welcome to nowcoder
你的脚本获取以上输入应当输出:
that is your bag
to the degree or extent indicated.
welcome to nowcoder
说明:
你可以不用在意输出的格式,包括空格和换行
#! /bin/bash
awk '/this/next print $0'
描述15 去掉不需要得行
写一个 bash脚本以实现一个需求,去掉输入中的含有B和b的单词
示例:
假设输入如下:
big
nowcoder
Betty
basic
test
你的脚本获取以上输入应当输出:
nowcoder test
说明:
你可以不用在意输出的格式,空格和换行都行
#! /bin/bash
awk '/B|b/ next print $0'
描述16 判断输入的IP是否正确
写一个脚本统计文件nowcoder.txt中的每一行是否是正确的IP地址。
如果是正确的IP地址输出:yes
如果是错误的IP地址,四段号码的话输出:no,否则的话输出:error
假设nowcoder.txt内容如下
192.168.1.1
192.168.1.0
300.0.0.0
123你的脚本应该输出
yes
yes
no
error
#! /bin/bash
awk -F "." '
if( NF == 4 )
for(i=1;i<=NF;i=i+1)
if($i > 255)
print "no";
break
if(i==5)print "yes"
else
print "error"
'
描述17 将字段逆序输出文件的每行
将字段逆序输出文件nowcoder.txt的每一行,其中每一字段都是用英文冒号: 相分隔。
假设nowcoder.txt内容如下:
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
你的脚本应当输出
/usr/bin/false:/var/empty:Unprivileged User:-2:-2:*:nobody
/bin/sh:/var/root:System Administrator:0:0:*:root
#! /bin/bash
awk -F ':' '
for (i = NF; i > 0; i = i - 1)
if (i==1)
printf("%s", $i)
else
printf("%s:", $i)
printf("\\n")
'
以上是关于用shell awk解决所有牛客网-SHELL篇练习问题的主要内容,如果未能解决你的问题,请参考以下文章