Chinaunix

标题: awk打印去掉最后两个域 [打印本页]

作者: papokaka    时间: 2009-04-20 12:06
标题: awk打印去掉最后两个域
xxx.xxxx.xxxx.tar.bz
我想输出的是
xxx.xxxx.xxxx
即去掉后边的两个域,请问用awk如何实现
作者: wtuter    时间: 2009-04-20 12:08
标题: 回复 #1 papokaka 的帖子
$NF=""
$(NF-1)=""
作者: papokaka    时间: 2009-04-20 12:11
谢谢@@
$echo AIX.PI6002.090316.tar.Z | awk -F "." '{$NF="";$(NF-1)=""}{print $0}'
AIX PI6002 090316
作者: blackold    时间: 2009-04-20 12:11
标题: 回复 #1 papokaka 的帖子
awk -F . 'NF-=2' urfile
作者: ywlscpl    时间: 2009-04-20 12:12
[root@Mylinux tmp]# echo "xxx.xxxx.xxxx.tar.bz" | awk '{print gensub(/(.*)\.[^\.]+\.[^\.]+/,"\\1",1)}'
xxx.xxxx.xxxx
作者: papokaka    时间: 2009-04-20 12:12
变成这样子了耶
echo AIX.PI6002.090316.tar.Z | awk -F "." '{$NF="";$(NF-1)=""}{OFS="."}{print $0}'
AIX.PI6002.090316..
作者: papokaka    时间: 2009-04-20 12:18
标题: 回复 #5 ywlscpl 的帖子
可以有不用gensub函数的方法吗
作者: ywlscpl    时间: 2009-04-20 12:19
没gensub的话
[root@Mylinux tmp]# echo AIX.PI6002.090316.tar.Z | awk '{print substr($0,1,match($0,/\.[^\.]+\.[^\.]+$/)-1)}'
AIX.PI6002.090316

或者
[root@Mylinux tmp]# echo AIX.PI6002.090316.tar.Z | awk -F "." '{for (i=1;i<NF-2;i++) printf $i".";print $(NF-2)}'
AIX.PI6002.090316

[ 本帖最后由 ywlscpl 于 2009-4-20 12:23 编辑 ]
作者: greendays    时间: 2009-04-20 12:22
标题: 回复 #1 papokaka 的帖子
[root@Greendays lianshou]# echo "xxx.xxxx.xxxx.tar.bz" | awk -F"." '{print $1"."$2"."$3}'
xxx.xxxx.xxxx
作者: blackold    时间: 2009-04-20 12:22
try:
  1. awk 'NF-=2' FS=. OFS=.  urfile
复制代码

作者: ywlscpl    时间: 2009-04-20 12:25
原帖由 blackold 于 2009-4-20 12:22 发表
try: awk 'NF-=2' FS=. OFS=.  urfile


学习学习
作者: greendays    时间: 2009-04-20 12:26
引用黑哥的代码
[root@Greendays lianshou]# echo "xxx.xxxx.xxxx.tar.bz" | awk -F . 'NF-=2' | sed 's/ /./g'
xxx.xxxx.xxxx
作者: papokaka    时间: 2009-04-20 12:43
标题: 回复 #9 greendays 的帖子
。。。。不知道前面有几个域
作者: greendays    时间: 2009-04-20 12:51
标题: 回复 #13 papokaka 的帖子
[root@Greendays lianshou]# echo "xxx.xxxx.xxxx.tar.bz" | awk -F. 'NF-=2' OFS=.  
xxx.xxxx.xxxx




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2