Chinaunix

标题: awk如何print 剔除了$1的$0? [打印本页]

作者: albcamus    时间: 2009-09-07 11:18
标题: awk如何print 剔除了$1的$0?
比方说,这样一个串:

111.222.333.444.555.html

以.为分隔符, $1是111, $0是整个串, 如何print 222.333.444.555.html?  有没有连接符能把 $2到$NF之间连接成一个串?


注意, 一共有多少个域是未知的, 也就是说, 有可能是111.222.html, 也有可能是111.222.333.444.555.666.html

谢谢
作者: ly5066113    时间: 2009-09-07 11:22
标题: 回复 #1 albcamus 的帖子
这种情况还是cut方便

echo '111.222.333.444.555.html' | cut -d. -f2-
作者: ywlscpl    时间: 2009-09-07 11:27
awk '{sub(/^[^.]*\./,"");sub(/\.[^.]*$/,"")}1' file
awk '{print gensub(/^[^.]*\.(.*)\.[^.]*$/,"\\1",1)}' file

看成了剔除$1和$NF,改一下

awk '{sub(/^[^.]*\./,"")}1' file
awk '{print gensub(/^[^.]*\.(.*)/,"\\1",1)}' file

[ 本帖最后由 ywlscpl 于 2009-9-7 11:29 编辑 ]
作者: lovegqin    时间: 2009-09-07 11:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: liaosnet    时间: 2009-09-07 11:29
标题: 回复 #4 lovegqin 的帖子
这个会有问题~ 输出没有. 了
作者: 寂寞烈火    时间: 2009-09-07 11:31
sed 's/^[^.]\+\.//'
作者: ywlscpl    时间: 2009-09-07 11:33
标题: 回复 #4 lovegqin 的帖子
没这么简单的,注意OFS

awk -F "." '{printf $2;for (i=3;i<=NF;i++) printf "."$i;print ""}' file
作者: 寂寞烈火    时间: 2009-09-07 11:38
原帖由 ywlscpl 于 2009-9-7 11:33 发表
没这么简单的,注意OFS

awk -F "." '{printf $2;for (i=3;i

用awk多麻烦呀,还不如这样呢
echo ${str#*.}
作者: Minsic    时间: 2009-09-07 11:41
如果只有一行而且用bash的话,为什么不考虑用${var#*.}这样的方法?

edited:呃,看帖墨迹了会楼上的就已经说了……
作者: lovegqin    时间: 2009-09-07 11:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: ywlscpl    时间: 2009-09-07 12:04
标题: 回复 #6 寂寞烈火 的帖子
楼主标题要求awk ,依楼主题目给的答案
作者: albcamus    时间: 2009-09-08 11:32
多谢诸位,忽然想我这么写行不行?

$ echo "135zhang11.222.333.444.66.txt" |gawk '{ sub(/^[0-9a-zA-Z]+\./, ""); print }'
222.333.444.66.txt
作者: 可恶的    时间: 2009-09-08 13:03
awk -F<NF;i++)printf $i".";printf $NF"\n"}'
作者: 可恶的    时间: 2009-09-08 13:04
囧,从konsole复制过来的时候没注意看。
awk -F '.' '{for(i=2;i<NF;i++)printf $i".";printf $NF"\n"}' yourfile
作者: albcamus    时间: 2009-09-08 15:30
我的需求是这样的, 还得麻烦大家指点:

某个目录下, 有很多12.xxxx.html、112.xxxx.html、1023.yyyy.html这样的文件, 如果awk以.为分隔符, 那么把$1变成以printf %04d 的方式。 另外,还有2.html这样的文件…

能在awk里直接做到吗?
作者: ly5066113    时间: 2009-09-08 15:38
标题: 回复 #15 albcamus 的帖子
这个意思?

ls *.html | awk 'BEGIN{FS=OFS="."}{$1=sprintf("%04d",$1)}1'
作者: albcamus    时间: 2009-09-08 15:47
原帖由 ly5066113 于 2009-9-8 15:38 发表
这个意思?

ls *.html | awk 'BEGIN{FS=OFS="."}{$1=sprintf("%04d",$1)}1'


对,就是要的这个结果, 谢谢。

我先看看info手册, 看不懂再来请教
作者: albcamus    时间: 2009-09-08 17:24
我看懂了,向你们学习。




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