awk 以列为域提取文件内容

文件内容如下:

[[email protected] tmp]# cat file
[aa]
aa1
dd2
dd3
dd4

[bb]
dd5
dd6
dd7
xx8
dd9

[cc]
ee2
334
ghdfg7
uuu
ooo7
sdsd
ggg
gogo
pp[
gggs
ssss
jjjj
aaaa

我现在的需求是提取出[bb] 到[cc]之间的所有行

[bb]
dd5
dd6
dd7
xx8
dd9
[[email protected] tmp]# awk -v RS= ‘/^\[bb]/‘ file
[bb]
dd5
dd6
dd7
xx8
dd9

这个怎么理解呢?

-v 大家度知道是指定变量的

所以这个-v一是同样的指定了RS=

等于空就是默认的输入分隔符为‘\n‘既是空行

so我们这里的文件就会被分为3行了

[[email protected] tmp]# awk -v RS= ‘{print $1,$2,$3,$4,$5,$6,$7}‘ file
[aa] aa1 dd2 dd3 dd4
[bb] dd5 dd6 dd7 xx8 dd9
[cc] ee2 334 ghdfg7 uuu ooo7 sdsd

这样是不是好理解多了,我想打印哪一行就打印哪一行就行了

[[email protected] tmp]# awk -v RS= ‘NR==2 {print}‘ file
[bb]
dd5
dd6
dd7
xx8
dd9

这里的 NR==2 {print} 和 /^\[aa]/ 是同样的结果

第一个是明确了打印第二行

第二个是匹配[aa]然后打印[aa]所在的行,达到同样的结果

[[email protected] tmp]# awk -v RS= ‘NR==2,NR==3 {print}‘ file
[bb]
dd5
dd6
dd7
xx8
dd9
[cc]
ee2
334
ghdfg7
uuu
ooo7
sdsd
ggg
gogo
pp[
gggs
ssss
jjjj
aaaa

这样打印出来的是第二个域到第三个域之间的结果

[[email protected] tmp]# awk -v RS= ‘NR==1,NR==3 {print}‘ file
[aa]
aa1
dd2
dd3
dd4
[bb]
dd5
dd6
dd7
xx8
dd9
[cc]
ee2
334
ghdfg7
uuu
ooo7
sdsd
ggg
gogo
pp[
gggs
ssss
jjjj
aaaa

而这样打印的是第一个域到第三个域之间的结果

如果我只想打印第一域和第三域呢?

[[email protected] tmp]# awk -v RS= ‘NR==1;NR==3 {print}‘ file

[aa]

aa1

dd2

dd3

dd4

[cc]

ee2

334

ghdfg7

uuu

ooo7

sdsd

ggg

gogo

pp[

gggs

ssss

jjjj

aaaa

这样就行了.

如果有其他的要求,在干要求改就行了到此实验结束.

时间: 2024-08-08 04:24:25

awk 以列为域提取文件内容的相关文章

读文件内容,分割字符串,去除空格,换行,回车,制表符

package sunline.common.logic.Utils; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Lis

7.6 提取text.txt文件内容,进行文本等号以后求和

1 //提取text.txt文件内容,进行文本等号以后求和 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define F_PRINT_ERR(e) 5 do 6 { 7 if(e == NULL) 8 { 9 printf("open error");10 exit(-1);11 }12 }13 while(0) 14 int main(void) 15 { 16 17 FILE* pf = fopen("

shell脚本,awk结合正则来打印文件里面的内容。

文件内容如下:key1abc d key2 1.想得到如下结果: abc d 2.想得到如下结果: key1key2

linux下使用find xargs grep查找文件及文件内容

1,在某个路径下查文件. 在/etc下查找“*.log”的文件 find /etc -name “*.log” 2,扩展,列出某个路径下所有文件,包括子目录. find /etc -name “*” 3,在某个路径下查找所有包含“hello abcserver”字符串的文件. find /etc -name “*” | xargs grep “hello abcserver” 或者find /etc -name “*” | xargs grep “hello abcserver” > ./cqt

Linux 下比较文件内容并相同部分、不同部分

说明,是通过file2内容与file1做比较,最后列出file1与file2不同的部分! 一.准备两个文件: [[email protected] test1]# cat file1 a b c d e [[email protected] test1]# cat file2 c e 二.比较方法: 方法一:grep 命令 [[email protected] test1]# grep -v -f file2 file1 a b d 方法二:comm 命令 [[email protected]

Class文件内容及常量池

当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM开辟出来的方法区内存中.那么这个class文件里面到底有些什么内容呢? 一.class文件内容概述 class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目.这些项目之间没有任何无意义的字节,因此class文件非常紧凑.占据多字节空间的项目按照高位在前的顺序存放.下面我们详细讨论这些项目: ★ magic(魔数)    每个class文件的前4个字节称为魔数,值为0xCAFEB

flash跨域策略文件crossdomain.xml配置详解

来源:http://www.2cto.com/Article/201108/100008.html 0x01 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据. 位于www.a.com域中的SWF文件要访问www.b.com的文件时,SWF首先会检查www.b.com服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功:若crossdomain.xml文件存在,且里边设置

Class文件内容及常量池(转)

原文:http://hxraid.iteye.com/blog/687660 当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM开辟出来的方法区内存中.那么这个class文件里面到底有些什么内容呢? 一.class文件内容概述 class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目.这些项目之间没有任何无意义的字节,因此class文件非常紧凑.占据多字节空间的项目按照高位在前的顺序存放.下面我们详细讨论这些项目: ★ mag

第五天 文件权限设置acl attr 文件内容排序sort uniq diff

linux root组 不是管理员角色 root组并不是有root权限 useradd -r -m r一般配合m使用 服务器让每个uid最好一样,统一标准化管理 token(uid ,gid,groups) file uid =read write 先看uid再看权限 想看到最新 file uid =read write excute必须重新登录 rwx二进制文件一般读取没有实际意义 ,不是随便一个权限赋予读都有意义读和写一般给文本文件,读权限对二进制文件不受影响 file r看文件内容 w修改