linux用shell奇数打印星号,shell 打印偶数行-奇数行 ,打印行号

打印行号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' file2.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.txtsed -n 'n;p'status.txtsed -n '0~2p'status.txtawk '!(NR%2)'status.txtawk 'i++%2'status.txtawk '!(i=i?0:1)'status.txtawk '!(i=!i)'status.txt

[root@sgzhang /]# cat -n tt1  aaa2  bbb3  ccc4  ddd5  eee6  fff[root@sgzhang /]# cat -n  tt |awk NR%2==02  bbb4  ddd6  fff[root@sgzhang /]# cat -n  tt |awk NR%2==11  aaa3  ccc5  eee[root@sgzhang /]# cat -n tt |sed -n 'p;n'1  aaa3  ccc5  eee[root@sgzhang /]# cat -n tt |sed -n 'n;p'2  bbb4  ddd6  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 <= NF; i++) s = s+$i; print s }'   filname.ext

#s用作每行和的累加,从1到NF(每行总的字段数),依次累加

11. 计算文件中所有字段的和

awk '{ for (i = 1; i <= NF; i++) s = s+$i }; END { print s }'   filname.ext

#s用作总和的累加,每行都处理完成了,再输出s;注意和10对比,此处没有每行清零,所以累加了。没有设置的变量,默认为空,但是会根据上下文数值计算情况自动变为0

12. 将每个字段用其绝对值代替awk '{ for (i = 1; i <= NF; i++) if ($i <

0) $i = -$i; print }'  filname.ext

#$i表示当前行中的字段,$0表示当前行,可以改变$i的值

13. 计算文件中总的字段和(例如计算单词数)awk '{ total = total + NF }; END { print total

}'  filname.ext

14. 计算匹配指定信息的总行数awk '/Linux/ { n++ }; END { print n+0

}'  filname.ext

15. 找到文件中每行第一个字段中,最大的数,以及其所在的行awk '$1 > max { max=$1; maxline=$0 }; END { print max,

maxline }'  filname.ext

#用max存储最大的数,maxline存储最大数所在的行,并在最后输出

16. 显示当前行的字段数,并输出当前行awk '{ print NF ":" $0 } '  filname.ext

17. 显示每行最后一个字段的内容awk '{ print $NF }'  filname.ext#NF表示当前行的字段数,例如为3,则$NF,就是$3,也就是第三个字段了

18. 显示最后一行的最后一个字段awk '{ field = $NF }; END { print field

}'  filname.ext

#每行处理没有输出,尽在最后输出,field作为每行的最后一行的暂存变量

19. 显示字段数小于4的行awk 'NF < 4'  filname.ext#{}以外的内容,作为条件,没有{},则默认输出当前行

20. 显示每行的最后一个字段小于4的行awk '$NF < 4'  filname.ext#注意和19对比

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值