博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell简易学习练习
阅读量:6453 次
发布时间:2019-06-23

本文共 2453 字,大约阅读时间需要 8 分钟。

1.Linux Shell入门

Quiz 1 一个接受命令行参数的shell脚本

任务 编写一个shell脚本1.sh,这个脚本接受一个命令行参数,并把这个参数打印两次到标准输出。 如果输入没有参数输入或者有多于一个参数输入,输出"error"。

 

if [ $# != 1 ] ; then	echo "error"else	echo $1$1fi

Quiz 2 生成时间相关文件夹

 

任务 编写一个shell脚本2.sh,无论脚本在任何位置用绝对路径执行都能完成这样的任务,在脚本2.sh所在目录新建一个空文件tmp_YYYYMMDD YYYYMMDD为当前日期

 

a=`date +%Y%m%d`b="tmp_"$atouch $b

 

2.学习Grep

题目

你需要用grep脚本(或者用grep和其他shell命令配合)实现如下一些功能
任务

Quiz 1 

请完成脚本1.sh,统计文件中的空行个数并输出

数据 1.dat

 

grep -c "^$" 1.dat

Quiz 2
任务 请完成脚本2.sh,统计文件中不包含".txt"的行的行数并输出
数据 2.dat

 

 

grep -c -v "[.]txt" 2.dat

Quiz 3
任务 请完成脚本3.sh,求两个文件的差集(3a.txt-3b.txt)并排序输出到标准io中
数据 3a.dat,3b.dat

 

 

grep -F -v -f 3a.dat 3b.dat | sort | uniqgrep -F -v -f 3b.dat 3a.dat | sort | uniq

Quiz 4

任务 在log文件中,有表示各轮迭代模型性能的报告(如下所示),
Total:      P=0.97198463(7841/8067) R=0.97914585(7841/8008) F=0.97555210
请将他们提取出来,并以如下格式输出。
P=0.97 R=0.98 F=0.98

 

 

for LINE in `grep "^* Total:" 4.dat`do	if [[ $LINE == "P="* ]];then 	p=${LINE:0:6}fi	if [[ $LINE == "R="* ]];then 	r=${LINE:0:6}fi	if [[ $LINE == "F="* ]];then 	f=${LINE:0:6}fi	# the new line parameter is -e,the other is -n	if [[ $p == "P="* ]] && [[ $r == "R="* ]] && [[ $f == "F="* ]];then 	echo -n $p	echo -n "  "	echo -n $r	echo -n "  "	echo -n $f	echo ""	p=""	r=""	f=""fidone

3.学习Awk

 

Quiz1:输出一个文件所有的偶数行,数据1.dat

 

awk 'NR%2==0' 1.dat

Quiz2: 对于一个保存单词 频率的文件,要同时计算它的累积频率,并将它填在第三列。 举例如下,输入文件是

 

 

the 100i 50is 45...

输出文件是:

 

 

the 100 100i 50 150is 45 195...

 

i=1THIRD=0for ID in $(cat 2.dat)do	NUM=$i	FIRST=$(awk 'NR=='$NUM' {print $1}' 2.dat)	SECOND=$(awk 'NR=='$NUM' {print $2}' 2.dat)	THIRD=$((THIRD+SECOND))	echo -n $FIRST	echo -n "  "	echo -n $SECOND	echo -n "  "	echo -n $THIRD	echo ""	i=$((i+1))done

Quiz3:读入一个包含词性的文件,从中提取出原始句子。 输入文件格式:

 

 

石家庄_ns 空气_n 污染_vn 排_v 第一_m潘石屹_ns 遭遇_v 被_p 代言_n...

输出文件:

石家庄空气污染排第一潘石屹遭遇被代言...

 

sed 's/[ _a-zA-Z ]//g' 3.dat

 

4.学习Sed

Quize 1

任务 去掉文件中的空行
数据1.dat

sed '/^$/d' 1.dat

Quiz 2
任务某个文件包含三列,第三列是文本,但是文本被'扩了起来,请用提取出这一列并去掉开头和结尾的'符号。
数据2.dat

sed "s/.*[ \t]\{1,\}'//;s/'//" 2.dat

Quiz 3 Sed批量去拓展名

 

请用sed和for配合,将文件名的后缀.raw去掉

#delete file's extensionfor file in `ls`; do mv $file `echo $file | sed 's/\.raw$//'`; done#add file's extension#for file in `ls`; do mv $file `echo $file | sed 's/$/\.raw//'`; done

5.Sort

 

Question:

Find out the most frequency 100 queries from the query log 有用户日志文件,每行记录了一个用户查询串,长度为1-255字节,共1千万行,请排出查询最多的前100条。

 

#!/bin/bashfile=query_log.txtline=100cat $file|  tr -cs  "\n" |      tr A-Z a-z |          sort |              uniq -c |                  sort -k1nr -k2 |                      head -n$line

 

 

转载地址:http://qvfzo.baihongyu.com/

你可能感兴趣的文章
linux pbs 用户时间,【Linux】单计算机安装PBS系统(Torque)与运维
查看>>
linux系统可用内存减少,在Linux中检查可用内存的5种方法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
ASP.NET性能优化之分布式Session
查看>>
TaffyDB Introduction
查看>>
转载:《TypeScript 中文入门教程》 16、Symbols
查看>>
JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记4
查看>>
C#技术------垃圾回收机制(GC)
查看>>
漫谈并发编程(三):共享受限资源
查看>>
【转】github如何删除一个仓库
查看>>
Linux系统编程——进程调度浅析
查看>>
大数据Lambda架构
查看>>
openCV_java 图像二值化
查看>>
状态模式
查看>>
删除CentOS / RHEL的库和配置文件(Repositories and configuraiton files)
查看>>
DJANGO变动库的一次真实手动经历
查看>>