Linux shell自动读mongo数据、远程获取文件大小示例脚本
1、示例1
功能:对mongoDB导出数据,根据sid的不同状态进行统计
技术点:shell bash 读写文件、字符串截取、函数、用多个文件提到的map、grep查找并赋值给变量
#!/bin/bash i=1
file=/Users/jifeng/Downloads/diu.txt read_recorde(){ findstr=$(grep "$1" tmp.sid.1)
find_sid=${findstr:0:20}
find_status=${findstr:23:2}
find_chanel=${findstr:21:1}
find_say=${findstr:25} echo "$findstr :have" >> tmp.sid.finded if [[ $find_status == 'nu' ]] && [[ $3 == 'nu' ]];
then
echo "$find_sid:$find_chanel:$find_status:$find_say" >> tmp.sid.2null
echo "$1:$2:$3:$4" >> tmp.sid.2null elif [[ $find_status == 'nu' ]] && [[ $3 == 'ok' ]];
then
echo "$find_sid:$find_chanel:$find_status:$find_say" >> tmp.sid.1null
echo "$1:$2:$3:$4" >> tmp.sid.1null elif [[ $find_status == 'ok' ]] && [[ $3 == 'nu' ]];
then
echo "$find_sid:$find_chanel:$find_status:$find_say" >> tmp.sid.1null
echo "$1:$2:$3:$4" >> tmp.sid.1null
elif [[ $find_status == 'ok' ]] && [[ $3 == 'ok' ]];
then
echo "$find_sid:$find_chanel:$find_status:$find_say" >> tmp.sid.2ok
echo "$1:$2:$3:$4" >> tmp.sid.2ok
else
echo "$find_sid:$find_chanel:$find_status:$find_say" >> tmp.sid.undefind
echo "$1:$2:$3:$4" >> tmp.sid.undefind fi } rm -rf tmp.sid.1null tmp.sid.2null tmp.sid.2ok tmp.sid.undefind tmp.sid.1 tmp.sid.finded tmp.sid.single
touch tmp.sid.1 cat $file | while read line || [[ -n ${line} ]];
do sid=${line:0:20}
channel=${line:20:1}
status=${line:62:2}
say=${line:64}
echo line $i:$sid:$channel:$status if grep -q "$sid" tmp.sid.1
then
read_recorde "$sid" "$channel" "$status" "$say"
echo ">>>$findsid"
else
echo "$sid:$channel:$status:$say" >> tmp.sid.1
fi
let "i=$i+1" done echo "回归"
cat $file | while read line || [[ -n ${line} ]];
do _sid=${line:0:20} if grep -q "$_sid" tmp.sid.finded
then
a=1+1
else
echo $line >> tmp.sid.single
fi done
2、示例
功能:根据ID调用mongo client进行查询并将结果存入变量,通过ssh远程登录获取响应的文件大小
#!/bin/bash
i=1
file=/root/1616/tmp.sid.1null
#file=/root/1616/tmp.sid.2ok
rm -rf tmp.sid.1null.filesize
cat $file | while read line || [[ -n ${line} ]];
do sid=${line:0:20}
channel=${line:21:1} args='db.iat.find({"sId":"'${sid}${channel}'"},{"host":1}).forEach(function(e){print(e.host)})'
result=`/data/mongodb/bin/mongo --quiet 172.16.175.68:40000/shtel --eval "$args"`
ip="${result%%:*}"
#echo $ip
ssh_args='ls -lh /data/voice/$sid*' #echo "ssh_arg:$ssh_args"
#echo "ssh:ssh -p 20000 root@$ip "$ssh_args
#files=`ssh -p -q 20000 root@$ip "$ssh_args"` files=`ssh -f -p 20000 root@$ip 'ls -lh /data/voice/'$sid$channel'*'`
#echo "file:"$files fileSize=`echo $files | awk -F' ' '{print $5}'`
#echo "filesize:"$fileSize
echo "line $i $line:$ip:$fileSize"
echo "$line:$ip:$fileSize" >> tmp.sid.1null.filesize
let "i=$i+1"
done
Linux shell自动读mongo数据、远程获取文件大小示例脚本的更多相关文章
- I.MX6 Android Linux shell MMPF0100 i2c 设置数据
#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 设置数据 # 说明: # 本文主要记录通过shell脚本来设置 ...
- Linux Shell自动交互/人机交互的三种方法
如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下. 一.背景 shell脚本在处理自动循环或大的任 ...
- Linux Shell 自动交互功能
需求背景: 近日,在安装某软件过程,发现在安装过程需要输入一些信息才能继续下一步操作,在机器数量较少情况下,我们可以单台登录上去完成安装操作,但当机器数量超过一定时,如果再手动登录操作,就会产生大 ...
- Linux shell 自动删除n天前日志
linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...
- linux shell 字符串操作详解(获取长度、查找,替换)
在做shell批处理程序时候,常常会涉及到字符串相关操作.有许多命令语句,如:awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号,能够达到相似效果,大家知道,使用内部操作符会省 ...
- linux shell 自动判断操作系统release 然后连接FTP yum源的脚本
如何搭建本地yum源见附录① 如何搭建FTP yum源见附录② 脚本正文: #!/bin/sh# CenterOS config yumOSV=`rpm -q --qf %{version} cent ...
- Linux Shell 自动备份脚本
写一个使用shell脚本增量备份系统文件,顺便复习一下shell脚本相关的命令,这个脚本可以根据自己的需求来备份不同的文件或者文件夹,进行完整备份和增量备份. 参考的网址:http://blog.51 ...
- linux shell自动输入实现
1 #!/bin/sh 2 3 while read line 4 do 5 str=$line 6 var1=`echo $str|awk -F ' ' '{pri ...
- Linux Shell输出颜色字符学习笔记(附Python脚本实现自动化定制生成)
齿轮发出咔嚓一声,向前进了一格.而一旦向前迈进,齿轮就不能倒退了.这就是世界的规则. 0x01背景 造了个轮子:御剑师傅的ipintervalmerge的Python版本.觉得打印的提示信息如果是普通 ...
随机推荐
- rxJava2.x源码解析
一. Rxjava是什么 Rxjava在GitHub的介绍是 "A library for composing asynchronous and event-based programs u ...
- Git分布式版本控制器使用
前言: 使用Git版本控制器差不多有一年多的时间了,在这一年多的时间里对这个传说的的分布式版本控制工具有了一定的了解.在实战项目开发中,对关于如何在通过Git提交项目,以及如何使用Git命令对提交的文 ...
- C# abstract 和 interface 区别
抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别如下: 抽象类不能直接实例化. 抽象类中可能包含抽象成员,但非抽象类中不可以. 抽象类不能被密封. 接口具有以下特征 接口类类 ...
- JavaScript 日期
JavaScript 日期 JavaScript 日期输出 默认情况下,JavaScript将使用浏览器的时区并将日期格式显示为全文本字符串: Tue Apr 02 2019 09:01:19 GMT ...
- 微软在Build 2019大会上发布Fluid Framework协作平台
在今年年度开发者大会上,微软已经为开发人员宣布了一个新的Fluid Framework.该框架基本上是一个新的基于Web的平台,允许团队在自由流动的流程上工作.微软已经分享了一些新功能,可以帮助团队在 ...
- react 地图发布 cesium 篇
上篇文章介绍了如何搭建 react cesium 开发环境.在开发环境下,项目一切运行正常.最近把项目打包发布出来,却遇见了 cesium 不能正确初始化.打开浏览器的调试面板,出现好多 404,资源 ...
- 上传App Store 被拒问题及解决方案总结
最近公司比较忙,一直忙着写代码做新的应用,一连上线了几个应用,我们也是忙得焦头烂额的,都没时间做总结,今天趁APP审核期间,总结一下近期上传App Store遇到的一些问题和解决方法,以便以后查阅. ...
- 由定时脚本错误以及Elasticsearch配置错误引发的Flink线上事故
近期接手离职同事项目,突然遇到线上事故,Flink无法正常聚合数据生成指标. 以下是详细的排查过程: 问题复现 清晨,运维报告Flink数据分析模块无法正常生成指标数据. 赶紧登陆Flink所在机器, ...
- [b0027] python 归纳 (十二)_并发队列Queue的使用
# -*- coding: UTF-8 -*- """ 学习队列 Queue 总结: 1. 队列可以设置大小,也可以无限大小 2. 空了,满了,读写时可以阻塞,也可以报错 ...
- https://jwt.io/一个可以解析token的神奇网站
网址:https://jwt.io/ 效果: