AWK只打印某个域后的所有域
有时我们需要将某个域之后的所有域打印出来,而且每个记录(行)的域的个数也不一定,所以用“$4,$5,…..$n,….$(NF-1),$NF”穷举是不现时的,我经过测试,总结了一下实现的方法,供大家参考。
// 测试文件内容
[root@cacti tmp]# cat file.txt
x1 x2 x3
x1 x2 x3 x4 x5
x1 x2 x3 x4 x5 x6
x1 x2 x3 x4 x5 x6 x7 x8
x1 x2 x3 x4 x5 x6 x7
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
1) 在NF不够4个的记录(行),将会打印出一个空行;
2) 在输出的结果中,每行结尾多了一个空格;
[root@cacti tmp]# awk '{for(i=4;i<=NF;i++) printf"%s ",$i};NF>4 {print ""}' file.txt
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
// 测试文件内容
[root@cacti tmp]# cat file.txt
x1 x2 x3
x1 x2 x3 x4 x5
x1 x2 x3 x4 x5 x6
x1 x2 x3 x4 x5 x6 x7 x8
x1 x2 x3 x4 x5 x6 x7
x1 x2 x3
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
[root@cacti tmp]# cat file.txt |awk 'NF>4 {a=index($0,$4);print substr($0,a)}'
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
[root@cacti tmp]# cat filexx.txt
x1 x2 x3
x1 x4 x3 x4 x5
x1 x4 x4 x4 x5 x6
x4 x2 x3 x4 x5 x6 x7 x8
x1 x2 x3 x4 x4 x6 x7
(本文件,可以发现$4的字串:x4,在2,3,4,5行,在$4之前的域都有出现过与之相同的字串:x4)
[root@cacti tmp]# cat filexx.txt |awk 'NF>4 {a=index($0,$4);print substr($0,a)}'
x4 x3 x4 x5
x4 x4 x4 x5 x6
x4 x2 x3 x4 x5 x6 x7 x8
x4 x4 x6 x7
[root@cacti tmp]# cat filexx.txt |awk 'NF>4 {$4="z"$4;a=index($0,$4);print substr($0,a)}'
zx4 x5
zx4 x5 x6
zx4 x5 x6 x7 x8
zx4 x4 x6 x7
[root@cacti tmp]# cat filexx.txt |awk 'NF>4 {$4="n"$4;a=index($0,$4);print substr($0,a+1)}'
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x4 x6 x7
[root@cacti tmp]# cat filexx.txt |awk 'BIGIN{FS="[ ]"} NF>4 {$4="n"$4;a=index($0,$4);print substr($0,a+1)}'
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x4 x6 x7
就是将某个(些)域替换成空值,如去除第一个域为:awk '{ $1=""; print $0 }' file.in
// 测试文件内容
[root@cacti tmp]# cat file.txt
x1 x2 x3
x1 x2 x3 x4 x5
x1 x2 x3 x4 x5 x6
x1 x2 x3 x4 x5 x6 x7 x8
x1 x2 x3 x4 x5 x6 x7
[root@cacti tmp]# awk '{ for(i=1;i<=3;i++){$i="a"}; print $0 }' file.txt
a a a
a a a x4 x5
a a a x4 x5 x6
a a a x4 x5 x6 x7 x8
a a a x4 x5 x6 x7
[root@cacti tmp]# awk '{ for(i=1;i<=3;i++){$i=""}; print $0 }' file.txt
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
问题:
1) 在NF不够4个的记录(行),将会打印出一个空行;
2) 在输出的结果中,去除的域会用空格来代替
[root@cacti tmp]# awk 'NF>4 { for(i=1;i<=3;i++){$i=""}; print $0 }' file.txt
x4 x5
x4 x5 x6
x4 x5 x6 x7 x8
x4 x5 x6 x7
本文介绍了三种方法来解决AWK“只打印第N个域之后的所有域”的问题。
AWK只打印某个域后的所有域的更多相关文章
- excel怎么只打印某页?excel怎么只打印某几页
有时候我们需要打印的excel文件,内容较多有好几页,而我们只需要打印里面的部分内容,为了减少纸张.碳粉的浪费,我们怎样精准打印某页或某几页呢? 工具/原料 Excel / WPS软件 方法/ ...
- 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
问题:关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出” 办法:在容纳ReportViewer的窗体后台代码中,添加如下代码即可 protected override ...
- log4j配置只打印指定jar或包的DEBUG信息
有的时候查问题的时候需要打印第三方jar里面的debug信息,假如全部jar都打印的话日志文件会很大,这个时候可以配置log4j只打印指定jar的debug信息或者包,同时输出到了一个新的文件中. 比 ...
- SQLServer加入域后无法远程连接
如果您更改的SQLServer的远程连接端口(默认1433),加入域后,防火墙会把自定义规则都禁用掉 所以,你得进防火墙,查看,是否防火墙关闭了,我的就是关闭了,找了半天原因
- NodeJs 设置跨域后页面全部变成了源码在浏览器上显示
百度搜索跨域后得到 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin" ...
- lua 写逻辑打印log时,打印到一半后停止不再打印,程序停止
问题描述:ubuntu下用lua开发游戏电子邮件模块,自己测试时向用户推送100封,而用户最多只能有50封.这是调用sysdelete删除一些邮件.当打印log时,打印到一半后程序中途停止.将打印lo ...
- .NET Framework 3.5 无法安装以下功能 安装错误:0x800F0906(客户端加域后出现)
问题:安装错误:0x800F0906 系统安装并加域后,在安装用友软件时提示没有.net 3.5 系统为win10 但是,点击确定后,却出现了这样的错误.如下: 点击下载并安装此功能,出现了这样 ...
- excel中如何设置只打印第一页
在打印表格时,怎样设置只打印第一页呢,操作很简单,下面,小编说下操作方法. 方法/步骤 打开要打印的工作表, 再点击“文件” 弹出的页面中,在左侧这里,点击“打印” 在右边弹出与打 ...
- nginx处理vue打包文件后的跨域问题
起因 在vue文件打包后,项目脱离了vue配置的反向代理配置,还是会报跨域的错误,或者直接打不开本地文件, 但是此刻我们想打开打包后的文件,测试一下文件有没有错误,因为经常会存在开发阶段没有问题,打包 ...
随机推荐
- javascript判断非空
/* *判断非空 * */ function isEmpty(val){ if(val == null)return true; if(val == undefined || val == 'unde ...
- Css - 黑魔法
我们发现了一个新功能,现在你可以创建sticky块元素了.这和 fixed 块元素一样,但不同的是, sticky 块元素是不会遮挡另一个块元素的,最好看看demo 类似的功能实现还可以使用jquer ...
- 启动Automatic Updates出现0x80004015错误的解决办法
前几天我的本本加入到AD里面了,并且换了个用户名,结果昨天就发现升级出毛病了,Automatic Updates服务无法启动,启动时候出现0x80004015错误:Automatic Updates ...
- html5+css3
1,文件声明,<!Doctype>,不再有严格模式和混杂模式 2语意的标签 1,header 头 section中 nav导航(中上) aside侧边栏(中左) article内容(中右) ...
- angular+selecte2(angular ng-repeat渲染)
一.页面代码 <select id="sponsorId" select2 ng-model="sponsorSelectedObj" ng-change ...
- Ubuntu中搭建Nginx+PHP环境最简单的方法
先安装: sudo apt-get install nginx php5-fpm 然后编辑配置文件: sudo gedit /etc/nginx/site-available/default 找到lo ...
- QT学习之-HelloWorld
实现HelloWorld有2种方法. 第一种在mainwindow.ui直接添加Label且写上“HelloWorld”. 第二种是代码直接实现 #include "mainwindow.h ...
- RT-Thread的CPU使用率计算
CPU 的使用率一般是我们比较关心的问题,在这里我们就用空闲线程的钩子函数去统计 CPU 的使用率,并通过串口打印出来.首先我们在初始化线程中设置好钩子函数,并在 LED 线程中给系统人为的加入很多“ ...
- Machine Learning in Action -- AdaBoost
初始的想法就是,结合不同的分类算法来给出综合的结果,会比较准确一些 称为ensemble methods or meta-algorithms,集成方法或元算法 集成方法有很多种,可以是不同算法之间的 ...
- ubuntu挂载其他分区到/home下,将当前分区内容替换
有时候,我们装系统时,可能因为没注意,把某一个分区分小了,导致到最后,我们的那个盘容不下了, 这时,面临的两个选择就是:要么卸载一些软件,要么重新分区,重装系统,其实,还可以这样,去把其他 多余的盘分 ...