shell awk学习3
需求:
某文件aa的内容如下:
a
/p1
/p2
b
/pp1
c
/ppp1
/ppp3
d
/p1
/p2
/p3
e
/p1
/p2
/p3
/p4
期望输出结果:
a /p1 /p2
b /pp1
c /ppp1 /ppp3
d /p1 /p2 /p3
e /p1 /p2 /p3 /p4
思路
第一个非“/” 开始的行到第二非“/”开始的行之间的内容输出到一行,第二个和第三个以非“/”开始的行之间的内容,其中前一个是闭区间,后一个是开区间,
比如:获取的非“/” 开始的行号为
1 3 5 7
那么输出 对应文件的一下行的内容:
1 2
3 4
5 7
注意:倒数第二个的时候是闭区间,即7不用减1。
脚本
awk '{if($1 !~/^\//){print NR}}' aa >row1
cat aa | wc -l >> row1
a=($(cat row1))
len=${#a[@]}
for ((i=0;i<=$len-2;i++))
do
if [[ ${a[${#a[*]}-2]} -eq ${a[i]} ]];then
echo ${a[i]}"|"${a[i+1]} >> b
else
let "tmp = ${a[i+1]}-1"
echo ${a[i]}"|"$tmp >> b
fi
done
for i in `cat b`
do
begin=$(echo $i | awk -F'|' '{print $1}')
end=$(echo $i | awk -F'|' '{print $2}')
awk 'NR>='$begin' && NR<='$end'{printf $0" "}' aa
echo
done
rm -rf b
脚本解释:
awk '{if($1 !~/^\//){print NR}}' aa >row1 // 获取所有非“/”开始的行号
cat aa | wc -l >> row1 // 插入aa文件的总行数,定位最后一个区间的结束,后面会用到这个。
a=($(cat row1)) 转换为数组 红色字体的代码块实现思路中描述的。 最后一个for循环输出期望的结果。
测试结果:
[redis@lxd-vm1 ~]$ sh a4.sh
a /p1 /p2
b /pp1
c /ppp1 /ppp3
d /p1 /p2 /p3
e /p1 /p2 /p3 /p4
[redis@lxd-vm1 ~]$
shell awk学习3的更多相关文章
- [shell] awk学习
awk处理最后一行 awk '{if(NR>1)print a;a=$0}END{print a="b"}' file awk 'BEGIN{getline a}{print ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- Shell 脚本学习资料搜集
Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- Linux shell 菜鸟学习笔记....
20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- Linux 下Shell的学习
1.Shell学习 1.什么是Shell shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- shell语法学习
[原文] 菜鸟笔记shell教程学习. 本篇博客只是记录shell的一些关键语法,主要是做一个记录,有些内容也是copy过来的,并不是一个完整的教程,想完整学习shell的同学可以前往 shell脚本 ...
随机推荐
- HDU_1506_单调栈
http://acm.hdu.edu.cn/showproblem.php?pid=1506 从栈底到栈顶从小到大排序,碰到比栈定小的元素,出栈处理,直到栈顶比元素小或者栈为空. 数组最后多加了个-1 ...
- vs2017项目上传到github
如果要把项目提交到一个厂库里面,需要建个git存储库,比如选择新建git库选择VSVIEW文件夹,以后在这个文件夹下的项目,提交时都会提交到VSVIEW这个github仓库 选择的文件夹不在git文件 ...
- 在form子句中使用子查询时的注意事项
今天中午为了弄清这个问题,本人真的是头都搞大了!最后明白了一点,在from子句中使用子查询是,一定要将临时表的别名带上,否则会灰常痛苦!!!
- StackExchange.Redis 之 hash 类型示例
StackExchange.Redis 的组件封装示例网上有很多,自行百度搜索即可. 这里只演示如何使用Hash类型操作数据: // 在 hash 中存入或修改一个值 并设置order_hashkey ...
- 大数据篇:HDFS
HDFS HDFS是什么? Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File Syste ...
- thinkphp远程执行漏洞的本地复现
thinkphp远程执行漏洞的本地复现 0X00漏洞简介 由于ThinkPHP5 框架控制器名 没有进行足够的安全监测,导致在没有开启强制路由的情况下,可以伪装特定的请求可以直接Getshell(可以 ...
- mysql 支持emoji表情
在mysql插入emoji表情,出现错误: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A' for column ' ...
- 13-Servlet&Request
今日内容: 1. Servlet 2. Request Servlet 1. 概念 2. 步骤 3. 执行原理 4. 生命周期 5. Servlet3.0注解配置 6. Servlet的体系结构 se ...
- javascript Math对象 常用数字操作方法
var t='1.2'; parseInt(t) parseFloat(t)//1.2 Number(1.2)//1.2强制转换为数字 2.向上取整,有小数就整数部分加1 js: Math.ceil( ...
- Java面试—消息队列
消息队列面试题 题目来自于中华石杉,解决方案根据自己的思路来总结而得. 题目主要如下: 1. 为什么要引入消息队列? 消息队列的引入可以解决3个核心问题: 解耦 异步 削峰 解耦 在一个项目中,如果一 ...