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_ 201312-3_最大的矩形
遍历数组中每一元素,左右延伸得出宽度. #include<iostream> #include<cstdio> using namespace std; int main() ...
- java一些技术
怎么样得到编译.java文件得到.class文件 两个用于反编译的工具Luyten和java decompiler 直接将jar包或则.class字节码文件拖到里面即可得到反汇编得到对应的java文件 ...
- Codeforces 1197E Count The Rectangles(树状数组+扫描线)
题意: 给你n条平行于坐标轴的线,问你能组成多少个矩形,坐标绝对值均小于5000 保证线之间不会重合或者退化 思路: 从下到上扫描每一条纵坐标为y的水平的线,然后扫描所有竖直的线并标记与它相交的线,保 ...
- SpringBoot之ApplicationRunner接口和@Order注解
我们在开发中可能会有这样的情景.需要在容器启动的时候执行一些内容.比如读取配置文件,数据库连接之类的.SpringBoot给我们提供了ApplicationRunner接口来帮助我们实现这种需求.该接 ...
- 清晰架构(Clean Architecture)的Go微服务
我用Go和gRPC创建了一个微服务项目,并试图找出最好的程序结构,它可以作为我其他项目的模板.我还将程序设计和编程的最佳实践应用于Go Microservice程序,例如清晰架构(Clean Arch ...
- Go语言实现:【剑指offer】顺时针打印矩阵
该题目来源于牛客网<剑指offer>专题. 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如,如果输入如下4 X 4矩阵:1 2 3 4 5 6 7 8 9 10 11 ...
- Go语言实现:【剑指offer】机器人的运动范围
该题目来源于牛客网<剑指offer>专题. 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之 ...
- one-hot编码(pytorch实现)
n = 5 #类别数 indices = torch.randint(0, n, size=(15,15)) #生成数组元素0~5的二维数组(15*15) one_hot = torch.nn.fun ...
- 【WPF学习】第四十七章 WriteableBitmap类
WPF允许使用Image元素显示位图.然而,按这种方法显示图片的方法完全是单向的.应用程序使用现成的位图,读取问题,并在窗口中显示位图.就其本身而言,Image元素没有提供创建和编辑位图信息的方法. ...
- 给 iTerm 终端设置代理
本文介绍如何为自己的终端设置代理,从而实现在命令行中访问Google. 1. 背景 当你使用SS FQ时,大部分浏览器都可以成功访问Google,但是在命令行下执行curl https://www.g ...