需求:

某文件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的更多相关文章

  1. [shell] awk学习

    awk处理最后一行 awk '{if(NR>1)print a;a=$0}END{print a="b"}' file awk 'BEGIN{getline a}{print ...

  2. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  3. Shell 脚本学习资料搜集

    Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...

  4. 转 shell脚本学习指南

    shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...

  5. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  6. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  7. Linux 下Shell的学习

    1.Shell学习 1.什么是Shell    shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...

  8. Shell脚本学习指南笔记

    Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...

  9. shell语法学习

    [原文] 菜鸟笔记shell教程学习. 本篇博客只是记录shell的一些关键语法,主要是做一个记录,有些内容也是copy过来的,并不是一个完整的教程,想完整学习shell的同学可以前往 shell脚本 ...

随机推荐

  1. Codeforces_712_B

    http://codeforces.com/problemset/problem/712/B 水,判断奇偶即可. #include<iostream> #include<string ...

  2. BZOJ 2434 阿狸的打字机(ac自动机+dfs序+树状数组)

    题意 给你一些串,还有一些询问 问你第x个串在第y个串中出现了多少次 思路 对这些串建ac自动机 根据fail树的性质:若x节点是trie中root到t任意一个节点的fail树的祖先,那么x一定是y的 ...

  3. 利用Kubernetes中的leaderelection实现组件高可用

    在Kubernetes中,通常kube-schduler和kube-controller-manager都是多副本进行部署的来保证高可用,而真正在工作的实例其实只有一个.这里就利用到 leaderel ...

  4. 使用IDEA详解Spring中依赖注入的类型(上)

    使用IDEA详解Spring中依赖注入的类型(上) 在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值)注入Bean组件 ...

  5. linux下使用gdb对php源码调试

    title: linux下使用gdb对php源码调试 date: 2018-02-11 17:59:08 tags: --- linux下使用gdb进行php调试 调试了一些php的漏洞,记录一下大概 ...

  6. ubuntu14.04安装mysql5.6.37

    摘抄这篇文档是为了记录自己的日常学习情况,方便以后查看.后边注明了来源,如有不对的地方,希望大家指正,谢谢! 首先从mysql官网上下载所需的离线包,我现在的版本是(mysql-5.6.37-linu ...

  7. 文本段落缩进text-indent:2em

    中文文字中的段前习惯空两个文字的空白,这个特殊的样式可以用下面代码来实现: p{text-indent:2em;} <p>1922年的春天,一个想要成名名叫尼克卡拉威(托比?马奎尔Tobe ...

  8. Spring Boot自动配置如何工作

    通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...

  9. 最新咕咆+鲁班+图灵+享学+蚂蚁+硅谷+源码 Java架构师资料《Java架构师VIP课程》

    最新的Java架构师完整资料,完整视频+源码+文档. 每一套都是一百多个G的资料,无密. JAVA架构师全套课程 咕泡学院互联网架构师第一期 咕泡学院互联网架构师第二期 咕泡学院互联网架构师第三期 博 ...

  10. OBS使用教程

    OBS使用教程 OBS使用教程:录屏热键的设置 视频:基础画布分辨率1920/1080 1366,768输出缩放分辨率常用FPS值 30或者60 输出:输出模式:高级录像:编码器x264码率控制 CB ...