awk -F,FS,OFS,$NF 的使用

2 篇文章 0 订阅
1 篇文章 0 订阅

本文是在网上看到,觉得挺有意思,特地拿下来写个自己的理解,方便初学者理解,虽然没啥用,不过重点在思路。

NF 为最后一个字段的字段数。

下面几个例子的作用都一样 都是得到这样一个输出结果,即去掉后缀 .tar.Z

源字符串:AIX.PI6002.090316.tar.Z

结果字符串:AIX PI6002 090316

单独解释:以“.”为分隔符,把最后1个字段 和倒数第2个字段 赋值为空, 再输出整个字段

echo AIX.PI6002.090316.tar.Z | awk -F "." '{$NF="";$(NF-1)=""}{print $0}'

单独解释:以“.”为分隔符,输出前三个字段

echo "xxx.xxxx.xxxx.tar.bz" | awk -F. '{print $1"."$2"."$3}'

单独解释:以“.”为分隔符,把NF的值减去2,即5-2=3  

echo AIX.PI6002.090316.tar.Z | awk -F . 'NF-=2' 

单独解释:以“.”为分隔符,把NF赋值为NF-2

echo AIX.PI6002.090316.tar.Z  | awk 'NF=NF-2' FS=.  

单独解释:以“.”为分隔符把NF的值减去2输出的分隔符为" "  

echo AIX.PI6002.090316.tar.Z  | awk 'NF-=2' FS=. OFS=" "

下面输出结果为:AIX.PI6002.090316

单独解释:以“.”为分隔符,把NF的值减去2,同时把分隔符通过sed替换 空格 " "   "." 

echo "AIX.PI6002.090316.tar.bz" | awk -F . 'NF-=2' | sed 's/ /./g'

单独解释:以“.”为分隔符,通过for循环输出NF-2之前的字段,利用 printf 的结果输出没有换行符,通过print输出第NF-2个字段,print输出结果有换行符,如此拼出结果。 

echo AIX.PI6002.090316.tar.Z | awk -F "." '{for (i=1;i<NF-2;i++) printf $i".";print $(NF-2)}'

单独解释:一整个字段为字符串,然后从第一个字符开始到第三个字段的最后个字符。(match会返回一个数值)

echo AIX.PI6002.090316.tar.Z | awk '{print substr($0,1,match($0,/\.[^\.]+\.[^\.]+$/)-1)}'


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值