shell实战:多种方式实现获取列内容
自己不是专业的linux,平时工作中也不用linux编程,自学一些linux shell编程,忘了学,学了忘,效率不高。今天权当复习吧。
想想这样一个情景吧,获取某一行的部分列值。
考虑这样的输入:“root:x:0:0:root:/root:/bin/bash”,现在我们获取用户及shell信息。自己暂时想到的5种实现方式。
#!/bin/bash ############################################## #第二种实现 普通循环 ############################################## line="root:x:0:0:root:/root:/bin/bash"; oldIFS=$IFS; IFS=":"; declare -i count=0; #count=0; for item in $line; do [ $count -eq 0 ] && user=$item if [[ $count -eq 6 ]]; then shell=$item fi #let count++ count=$[ $count+1 ] #count=$(($count+1)) #count=`expr $count+1` #count=$(expr $count+1); done IFS=$oldIFS; echo 1: $user\'s shell is $shell by process:$$; ############################################## #第二种实现 借助sed命令; ############################################## user=`echo $line |sed 's/:.*$//'`; shell=$(echo $line |sed 's/^.*://'); echo 2: $user\'s shell is $shell by process:$$; ############################################## #第3种实现 借助cut命令; ############################################## user=`echo $line |cut -d: -f1`; shell=$(echo $line |cut -d: -f7); echo 3: $user\'s shell is $shell by process:$$; ############################################## #第4种实现 xargs使用 ############################################# echo $line |xargs -d: -n 1 |tr -s '\n'> file4 user=`cat file4 | head -n 1` shell=`cat file4 | tail -n 1`; echo 4: $user\'s shell is $shell by process:$$; rm -rf file4 2>>/dev/null ############################################## #第5种实现 awk使用 ############################################# echo $line |awk -F ':' '{print "5:" $1 " '\''s " " shell is" $7 }'
分析:抛开5种方式的优劣。可以了解以下内容。
文本处理工具:sed,tr
文本列选择工具:cut,awk
文本行选择工具:head,tail
计数运算多种方式:$[],$(()),``
变量声明:declare
参数处理:xargs
其实,在编写过程,连自己经常使用的命令,自己都记不起来。看来会和熟练还是不一样的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL主从延迟原因以及解决方案
1.MySQL数据库主从同步延迟原理。 谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高;slave的Slave_IO_Running线程会到主库取日志,效率会比较高,slave的Slave_SQL_Running线程将主库的DDL和DML操作都在slave实施。DML和DDL的IO操作是随机的,不是顺序的,因此成本会很高,还可能是slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。 2.MySQL数据库主从同步延迟是怎么产生的。 当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受...
- 下一篇
RocketMQ实战(一)
阿里巴巴有2大核心的分布式技术,一个是OceanBase,另一个就是RocketMQ。在实际项目中已经领教过RocketMQ的强大,本人计划写一个RocketMQ实战系列,将涵盖RocketMQ的简介,环境搭建,初步使用、API详解、架构分析、管理员集群操作等知识。 What is RocketMQ? RocketMQ作为一款分布式的消息中间件(阿里的说法是不遵循任何规范的,所以不能完全用JMS的那一套东西来看它),经历了Metaq1.x、Metaq2.x的发展和淘宝双十一的洗礼,在功能和性能上远超ActiveMQ。 1.要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。 2.RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证! 3.RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟! 4.丰富的消息拉取模式(Push or Pull) Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)