鸟同学的几道经典shell题
来源:互联网 发布:七天网络阅卷系统登录 编辑:程序博客网 时间:2024/05/06 20:35
sed 命令可以很好的进行行匹配,但从某一行中精确匹配某些内容,则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的。其中 -o 表示“only-matching”,即“仅匹配”之意,只输出匹配的部分。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大。
文件整理t9
整理文件:
employee文件中记录了工号和姓名employee.txt:100 Jason Smith200 John Doe300 Sanjay Gupta400 Ashok Sharmabonus文件中记录工号和工资bonus.txt:100 $5,000200 $500300 $3,000400 $1,250要求把两个文件合并并输出如下处理结果:400 ashok sharma $1,250100 jason smith $5,000200 john doe $500300 sanjay gupta $3,000
脚本如下:
#!/bin/bash#Test the list is in order or notsort -c $1 > /dev/null 2>&1sort -c $2 > /dev/null 2>&1if [ $test1 -eq 0 ] && [ $test2 -eq 0 ];then join -1 1 -2 1 $1 $2 | sort -k 2 | tr '[:upper:]' '[:lower:]'else sort -n -k 1,1 $1 >/tmp/tema sort -n -k 1,1 $2 >/tmp/temb join -1 1 -2 1 /tmp/tema /tmp/temb | sort -k 2 | tr '[:upper:]' '[:lower:]'fi
执行结果:
root@ubuntu:~/test# ./t9.sh t9-emplyee.txt t9-bonus.txt400 ashok sharma $1,250100 jason smith $5,000200 john doe $500300 sanjay gupta $3,000
文本分析
取出password中login出现的次数第一种方法结果: 4 /bin/bash 1 /bin/sync 1 /sbin/halt 31 /sbin/nologin 1 /sbin/shutdown第二种方法结果:/bin/sync 1/bin/bash 1/sbin/nologin 30/sbin/halt 1/sbin/shutdown 1
脚本如下:
#!/bin/bashcat $1 | grep login >/tmp/tmpaawk -F : '{print $6}' /tmp/tmpa |uniq -c >/tmp/tmpbecho "The first method is:"cat /tmp/tmpbecho "The second method is:"awk '{print $2,$1}' /tmp/tmpb
类似的:
文本如下t10-txt.txt:
binabdcbindddsdawedkbinsbinwellllllllllniebin
1.统计每行bin出现的次数:
#!/bin/bashgrep -o $1 t10-file.txt|wc -l
执行:
root@ubuntu:~/exam-nov16# ./t10.sh bin5root@ubuntu:~/exam-nov16# ./t10.sh sd1root@ubuntu:~/exam-nov16# ./t10.sh i6
或者
root@ubuntu:~/test# awk '{print gsub(/bin/,"&")}' t10-tx.txt 2001101
2.输出bin在全文总共出现的次数:
cat t10-tx.txt | grep -o "b"|wc -l
grep -o参数是只输出与指定字符匹配的部分,每匹配上一次,输出一个,立马换行。
sed 命令可以很好的进行行匹配,但从某一行中精确匹配某些内容,则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的。其中 -o 表示“only-matching”,即“仅匹配”之意,只输出匹配的部分。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大。
awk '{s+=gsub(/bin/,"&")}END{print s}' t10-tx.txt
或者
awk -v RS='' '{print gsub(/bin/,"&")}' t10-tx.txt
或者
awk -v RS='@#' '{print gsub(/bin/,"&")}' t10-tx.txt
-v 是要用系统变量。
执行结果都是返回正确的数值:
root@ubuntu:~/test# awk '{s+=gsub(/bin/,"&")}END{print s}' t10-tx.txt 5
Note:gsub返回值是替换的次数。
参考:
http://www.oschina.net/question/920274_151833
https://zhidao.baidu.com/question/2203013122068491908.html
http://blog.csdn.net/zhuying_linux/article/details/7104938
sub 和gsub的区别 在http://blog.itpub.net/27042095/viewspace-1096916/
若是全文进行替换,最好用sed:
root@ubuntu:~/test# sed -n 's/bin/"&"/gp' t10-tx.txt "bin"abdc"bin"ddd"bin"s"bin"nie"bin"
此时的&是引用的前面的bin,或者也可以直接用“bin”,即替换成加引号的指定字符串。
打印本机的交换分区大小
处理结果类似:
Swap:1024M
root@ubuntu:~/test# free -m |grep -i swap|awk '{print $1 $2"M"}'Swap:1021M
题源
http://rainbird.blog.51cto.com/211214/165779/
- 鸟同学的几道经典shell题
- 几道经典算法题
- 几道经典的几何作图趣题
- 几道经典的嵌入式C语言笔试题
- 几道经典的嵌入式C语言笔试题
- 几道经典的嵌入式C语言笔试题
- 几道经典的嵌入式C语言笔试题
- NOJ的几道经典搜索题题解
- 几道经典的嵌入式C语言笔试题
- 几道经典的SQL面试题
- 几道经典的sql题目
- 几道经典的SQL笔试题目
- 几道经典的sql面试题
- 几道经典的SQL笔试题目
- 几道经典的面试题
- 几道经典的SQL笔试题目
- 几道经典的Mysql题目
- 几道经典C 语言笔试题
- 安装Office2007-sp3
- 一个初学者关于vr游戏开发的优化总结
- oracle数据库function,语法
- EditText 点击即清除 hint
- java日志组件介绍(common-logging,log4j,slf4j,logback )
- 鸟同学的几道经典shell题
- 热修复、热补丁与插件化
- 命令查看memcached中的列表数据
- 【Android测试】MonkeyRunner之录制回放
- BMP文件操作C语言
- Android笔记
- SDK里应该下载哪些内容
- 找到一种表示的方法 (方式)
- udp 与 tcp 通信编程