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脚本 ...
随机推荐
- CCF_201503-2_数字排序
自己写个排序的cmp. #include<iostream> #include<cstdio> #include<algorithm> using namespac ...
- 移植freertos到stm32 f103 的基本流程和总结
为什么要在stm32 f103上面移植freertos stm32 f103 以他的全面的文档,亲民的价格,强大的功能.成为无数微设备的方案首选.在市场上有极大的使用量.市场占有率也是非常的高.f ...
- MySQL的简介
什么是数据库 1. 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同 的API(接口)用于创建,访问,管理,搜索和复制所保存的数据 2. 我们也可以将 ...
- opencv简单实用(cv2)
一.介绍 安装:pip install opencv-python OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS ...
- zabbix流量过大就断图
监控内网千兆交换机,流量图断断续续,大概位于400-500兆就会断图,而且还不准. 按照这个操作几乎可以成功 链接:http://itfish.net/article/23536.html h ...
- 一步步搭建jumpserver
测试推荐环境 CPU: 64位双核处理器 内存: 4G DDR3 数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6 环境 系统: CentOS 7 IP: 192.1 ...
- CentOS7时区和时间设置
[root@saltstack-master ~]# timedatectl set-timezone Asia/Shanghai [root@saltstack-master ~]# ln -sf ...
- Linux运维---磁盘存储-2. RAID
随着单块磁盘在数据安全.性能.容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁 ...
- jq模糊匹配(qq:2798641729)
图灵学院--Java高级架构师-互联网企业级实战VIP课程(价值6380)(qq:1324981084) jq是一般程序员在前台开发的时候都会使用的技术,其中模糊匹配查询在动态添加标签的时候经常用到, ...
- kernel定制,编译内核
定制kernel,就需要手动编译内核 一,准备开发环境 1,包组:Development Tools,Server Platform Development 2,包:ncurses和ncurses-d ...