1.Linux Shell入门

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

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

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

Quiz 2 生成时间相关文件夹

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

a=`date +%Y%m%d`
b="tmp_"$a
touch $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 | uniq
grep -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=""
fi
done

3.学习Awk

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

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

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

the 100
i 50
is 45
...

输出文件是:

the 100 100
i 50 150
is 45 195
...
i=1
THIRD=0
for 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 extension
for 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/bash
file=query_log.txt
line=100
cat $file|
tr -cs "\n" |
tr A-Z a-z |
sort |
uniq -c |
sort -k1nr -k2 |
head -n$line

Shell简易学习练习的更多相关文章

  1. 笔记——shell脚本学习指南

    <shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...

  2. Shell 脚本学习资料搜集

    Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...

  3. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  4. 转 shell脚本学习指南

    shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...

  5. TensorFlow简易学习[3]:实现神经网络

    TensorFlow本身是分布式机器学习框架,所以是基于深度学习的,前一篇TensorFlow简易学习[2]:实现线性回归对只一般算法的举例只是为说明TensorFlow的广泛性.本文将通过示例Ten ...

  6. Shell脚本学习 - 流程控制和函数

    继续Shell的学习.上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while) 流程控制 if else 流程控制不可为空,如果else没有语句执行,就不 ...

  7. Shell脚本学习 - 运算符

    继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...

  8. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  9. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

随机推荐

  1. [置顶] 64位Win2008_VS2012使用ODP.NET遭遇问题和解决办法

    最近为使用Oracle11G数据库做个快速开发的小程序,使用64位Win2008+Vs2012环境,结果碰壁连环,幸好不算太笨,终于解决了,特记录一下. 测试环境: Oracle11g (11.2.0 ...

  2. EasyUI DataGrid 中字段 formatter 格式化不起作用

    今天用 EasyUI datagrid 来做列表,要对一些数据进行格式化,推断某字段状态时,发现 formatter 格式化相应的函数不起作用. <table id="list_dat ...

  3. 管理支撑办公系统技术架构选型对照讨论(J2EE与SOA对照)

    续:管理支撑办公系统技术架构选型及相关技术应用范围.方法分析 M域办公系统改造.整合涉及到OA.业务流程.部室信息站点.部室专业管理等系统和信息共享等新需求,从信息化视角来看,内容多并且杂,这里核心业 ...

  4. 如何在一个jpg图片上面叠加文字

    1.将jpg转为bmp格式 2.在bmp文件上写上所需文字 3.将写入文字的bmp文件重新转为jpg格式 http://dev.csdn.net/develop/article/22/22948.sh ...

  5. 【Demo 0008】Java基础-抽象类

    本掌学习要点:       1.  了解抽象类的定义及使用场景:       2.  掌握final修饰的类.方法以及变量作用及用法:       3.  掌握abstract 修饰的类及方法作用及用 ...

  6. poj 2184 Cow Exhibition(背包变形)

    这道题目和抢银行那个题目有点儿像,同样涉及到包和物品的转换. 我们将奶牛的两种属性中的一种当作价值,另一种当作花费.把总的价值当作包.然后对于每一头奶牛进行一次01背包的筛选操作就行了. 需要特别注意 ...

  7. oracle触发器中增删改查本表

    oracle触发器中增删改查本表 (1)只有before insert触发器中才可以查询或更新本表 create or replace trigger tri_test_ins before inse ...

  8. Linux红黑树(二)——访问节点

    核心对红黑树使用两点说明 1.头文件 <Documentation/rbtree.txt> Linux's rbtree implementation lives in the file ...

  9. poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...

  10. Aerospike | Aerospike Chinese

    Aerospike | Aerospike Chinese 如果您的企业依赖于: 庞大的数据量(超过任何结构化数据库所能处理的数据量) 可预见(且快速)的性能 透明的扩展 始终正常运行 那么您只有一个 ...