美文网首页
awk显示行号 linux

awk显示行号 linux

作者: iBioinformatics | 来源:发表于2023-03-31 09:45 被阅读0次

https://blog.csdn.net/weixin_31201737/article/details/113045998

千次阅读

2016-02-24 11:44:00

awk行号相关的操作,个人认为写的非常好
转自:http://www.plob.org/2011/03/18/97.html

一. 行距:
1. 每行间加一个空行

1 awk '1; { print "" }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #输出当前行,在输出一个空行

2 awk '1 { print } { print "" }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;">

3 awk '{ print } { print "" }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

2. 1的另外一种实现方法:

1 awk 'BEGIN { ORS="\n\n" }; 1' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #预先设置每一行的分隔符号为两个换行;你可以尝试把ORS设置为其他的看看效果如何

3. 仅输出非空行,并每行间在加一个空行

1 awk 'NF { print 0 "\n" }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #NF表示当前行的字段数,0表示当前行,最后再加一个换行

4. 双倍行距;没行间两个空行

1 awk '1; { print "\n" }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext     #默认输出后会换行的,输出\n,则会输出两个空白行

等同于:

1 awk '{ print; print "\n" }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

5. 显示当前行在所在文件中的行号

1 awk '{ print FNR "\t" $0 }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #FNR,表示当前行在文件中的行号

6. 显示当前行在本次处理过程中的行号

1 awk '{ print NR "\t" $0 }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #NR,表示当前行在本次处理过程中的行号

小疑问:为啥有FNR和NR的差别呢?效果不都是一样么? 如果你给如:filname1.ext filname2.ext,你就会看到差别了。原来:FNR,是每个文件中的,换了一个文件,会归零;而NR则每个文件会累加起来的

7. 使用简单样式来输出

1 awk '{ printf("] : %s\n", NR, $0) }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #行号占用5位,不足补空格

8. 显示非空行

1 awk 'NF { 0=++a " :"0 }; { print }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;">

2 #NF前面说了,表示当前行的行号,此处用他作为条件,如果是空行,则NF为0,跳过;否则,用动态变量a存储非空行的数目

9. 计算行数:效果类似wc -l

1 awk 'END { print NR }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #END表示每行都处理完了后,在执行,此时NR就是最后一行的行号,也就是总的行数了。

10. 计算每一行的和

1 awk '{ s = 0; for (i = 1; i <= NF; i++) s = s+$i; print s }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

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

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

1 awk '{ for (i = 1; i <= NF; i++) s = s+$i }; END { print s }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

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

12. 将每个字段用其绝对值代替

1 awk '{ for (i = 1; i <= NF; i++) if (i < 0)i = -$i; print }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

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

13. 计算文件中总的字段和(例如计算单词数)

1 awk '{ total = total + NF }; END { print total }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

14. 计算匹配指定信息的总行数

1 awk '/Linux/ { n++ }; END { print n+0 }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

15. 找到文件中每行第一个字段中,最大的数,以及其所在的行

1 awk '1 > max { max=1; maxline=$0 }; END { print max, maxline }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

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

16. 显示当前行的字段数,并输出当前行

1 awk '{ print NF ":" $0 } ' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

17. 显示每行最后一个字段的内容

1 awk '{ print NF }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #NF表示当前行的字段数,例如为3,则NF,就是$3,也就是第三个字段了

18. 显示最后一行的最后一个字段

1 awk '{ field = $NF }; END { print field }' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext

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

19. 显示字段数小于4的行

1 awk 'NF < 4' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #{}以外的内容,作为条件,没有{},则默认输出当前行

20. 显示每行的最后一个字段小于4的行

1 awk '$NF < 4' <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> filname.ext <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> <wbr style="box-sizing: border-box;"> #注意和19对比

gff中统计基因的数量

$awk -F '\t' '{if($3=="gene") print }' GCA_008009225.1_AYv1.1_genomic.gff | wc -l

$awk -F '\t' '{if($3~"gene") print }' GCA_008009225.1_AYv1.1_genomic.gff | wc -l

相关文章

  • linux命令

    linux中 vi / vim显示行号或取消行号命令 显示行号:set number或者:set nu 取消行号显...

  • awk

    Linux System Environment awk功能 awk格式 awk 参数 一、awk截取列 二、显示...

  • Linux awk命令详解

    Linux awk命令详解 使用方法 调用awk 入门实例 1. 显示最近登录的5个帐号 awk工作流程是这样的:...

  • Linux

    linux awk命令详解、linux awk命令Linux常用操作指令Linux netstat命令详解 awk...

  • vim显示行号-临时显示+永久显示

    --临时显示行号 --永久显示行号

  • Vim 的使用技巧

    vim 是一款文本编辑器,很强大。linux 内置。 显示行号

  • 3-Linux 基础命令-2

    文本处理命令 cat 链接并显示 -n 显示行号-E 显示行尾控制符号 linux 显示的行尾的符号 $ Ctrl...

  • Mac终端的一些使用技巧

    mac/linux中vim永久显示行号、开启语法高亮 步骤1: cp /usr/share/vim/vimrc ~...

  • Linux文本处理

    又复习了grep、sed和awk三剑客,记下有用的点 grep 精确匹配,需要加上\> 显示行号:-n;统计次数:...

  • Vim如何显示行号

    临时显示某行的行号 在底线命令模式下输入 终端最底部显示结果 临时显示所有的行号 显示结果 永久显示所有行号 /e...

网友评论

      本文标题:awk显示行号 linux

      本文链接:https://www.haomeiwen.com/subject/zpkeartx.html