我有一个匹配的域列表,并通过 grep 传入,长度各不相同,但都匹配最后三个记录。我试图输出所有不合格的子域。
我有:
awk -F'.' -v OFS='.' '{$(NF-3)=$(NF-2)=$(NF-1)=""; print $0}'
我的输出在输出上留下了......
谢谢
答案1
在产生输出时,awk
遵循 的当前值NF
。如果要消除最后三个字段,只需减少NF
三个,例如通过NF-=3
:
awk -F. -v OFS=. '{NF-=3; print $0}'
将其与您的示例输入一起使用:
$ echo $'site.subdomain.xyz.com\nsite.sub.subdomain.xyz.com' | awk -F. -v OFS=. '{NF-=3; print $0}'
site
site.sub
顺便说一句,句号.
不是 shell 活动字符。因此,它不需要引用。
答案2
尝试替换它们:
$ awk -F'.' 'sub(FS $(NF-2) FS $(NF-1) FS $NF,"")' <<<"www.cse.iitb.ac.in"
www.cse
我不确定为什么这个方法有效而你的方法无效,但是根据这个unix.com发帖,就是这样。