设为首页 收藏本站
查看: 991|回复: 0

shell 打印偶数行-奇数行 ,打印行号

[复制链接]

尚未签到

发表于 2018-8-26 08:22:08 | 显示全部楼层 |阅读模式
  打印行号  awk '{print NR":"$0}'
  
  打印偶数行、奇数行
  (1)  awk '{print $0 > NR%2}'  file
  (2)  sed -n '1~2p'  file
  sed -n '2~2p' file
  (3)   sed -n 'p;n'  file
  sed -n 'n;p'  file
  (4)  1,awk 'NR%2==1' file
  2,awk 'NR%2==0' file
  (5) 1.awk 'NR%2' file
  2.awk '!(NR%2)' file
  (6) 1.awk 'i=!i' file
  2.awk '!(i=!i)' file
  解释:
  awk 'var=xx'应该说等价于awk 'xx{print}{var=xx}'
  awk 'i=!i'  == >  awk '!i{print}{i=!i}
  line 1: !0{print}{i=!0}==> {print;i=1}
  line 2: !1{print}{i=!1}==> {i=0}
  line 3: !0{print}{i=!0}==> {print;i=1}
1.awk 'NR%2==1' file  / /显示奇数行  
2.sed -n '1,$n;p' file   / /显示偶数行
  
3.sed -n '1,$p;n' file / /显示奇数行
  
4.奇数行:sed '2~2d' file / /显示奇数行
  
5.偶数行:sed '1~2d' file/ /显示偶数行
  sed '1d;n;d'  status.txt
  sed -n 'n;p' status.txt
  sed -n '0~2p' status.txt
  awk '!(NR%2)' status.txt
  awk 'i++%2'status.txt
  awk '!(i=i?0:1)' status.txt
  awk '!(i=!i)' status.txt
  
  
  [root@sgzhang /]# cat -n tt
  1  aaa
  2  bbb
  3  ccc
  4  ddd
  5  eee
  6  fff
  [root@sgzhang /]# cat -n  tt |awk NR%2==0
  2  bbb
  4  ddd
  6  fff
  [root@sgzhang /]# cat -n  tt |awk NR%2==1
  1  aaa
  3  ccc
  5  eee
  [root@sgzhang /]# cat -n tt |sed -n 'p;n'
  1  aaa
  3  ccc
  5  eee
  [root@sgzhang /]# cat -n tt |sed -n 'n;p'
  2  bbb
  4  ddd
  6  fff
  
  
  $ seq 6 | awk 'NR%2'
  1
  3
  5
  $ seq 6 | awk '!(NR%2)'
  2
  4
  6
  
  
  
  $ seq 6 | awk '++i%2'
  1
  3
  5
  $ seq 6 | awk 'i++%2'
  2
  4
  6
  
  
  $ seq 6 | awk 'i=!i'
  1
  3
  5
  $ seq 6 | awk -vi=1 'i=!i'
  2
  4
  6
  
  
  
  
  $ seq 6 | sed -n 'N;P'
  1
  3
  5
  $ seq 6 | sed -n 'n;p'
  2
  4
  6
  
  
  
  一. 行距:
  1. 每行间加一个空行
  awk '1; { print "" }'   filname.ext             #输出当前行,在输出一个空行
  awk '1 { print } { print "" }'   filname.ext
  awk '{ print } { print "" }'   filname.ext
  2. 1的另外一种实现方法:
  awk 'BEGIN { ORS="\n\n" }; 1'   filname.ext    #预先设置每一行的分隔符号为两个换行;你可以尝试把ORS设置为其他的看看效果如何
  3. 仅输出非空行,并每行间在加一个空行
  awk 'NF { print $0 "\n" }'   filname.ext       #NF表示当前行的字段数,$0表示当前行,最后再加一个换行
  4. 双倍行距;没行间两个空行
  awk '1; { print "\n" }'   filname.ext     #默认输出后会换行的,输出\n,则会输出两个空白行
  等同于:
  awk '{ print; print "\n" }'   filname.ext
  5. 显示当前行在所在文件中的行号
  awk '{ print FNR "\t" $0 }'   filname.ext      #FNR,表示当前行在文件中的行号
  6. 显示当前行在本次处理过程中的行号
  awk '{ print NR "\t" $0 }'   filname.ext       #NR,表示当前行在本次处理过程中的行号
  小疑问:为啥有FNR和NR的差别呢?效果不都是一样么? 如果你给如:filname1.ext filname2.ext,你就会看到差别了。原来:FNR,是每个文件中的,换了一个文件,会归零;而NR则每个文件会累加起来的
  7. 使用简单样式来输出
  awk '{ printf("] : %s\n", NR, $0) }'   filname.ext    #行号占用5位,不足补空格
  8. 显示非空行
  awk 'NF { $0=++a " :" $0 }; { print }'   filname.ext
  #NF前面说了,表示当前行的行号,此处用他作为条件,如果是空行,则NF为0,跳过;否则,用动态变量a存储非空行的数目
  9. 计算行数:效果类似wc -l
  awk 'END { print NR }'   filname.ext    #END表示每行都处理完了后,在执行,此时NR就是最后一行的行号,也就是总的行数了。
  10. 计算每一行的和
  awk '{ s = 0; for (i = 1; i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-556578-1-1.html 上篇帖子: 十道非常好的shell脚本试题 下篇帖子: shell 脚本中while 循环只执行一次的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表