awk 命令:

1、

打印行号和内容:

awk '{print NR":"$0}'

2、

输出:偶数行和奇数行到文件

awk '{print $0.txt > NR%2.txt}'  file

3、

打印出奇数行内容:(三者等价)

awk 'NR%2==1' file

awk 'NR%2' all_file.txt

awk 'i=!i' file

打印出偶数行的内容:(三者等价)

awk 'NR%2==0' file

awk '!(NR%2)' file

awk '!(i=!i)' file

sed 命令:

打印出奇数行:

sed -n '1~2p'  file

打印出偶数行:

sed -n '2~2p' file

扩展内容:

一. 行距:

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对比

linux命令(39):shell 打印偶数行,奇数行 ,行号的更多相关文章

  1. Shell 打印文件的最后5行

    目录 Shell 打印文件的最后5行 题解-awk 题解-tail Shell 打印文件的最后5行 经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowc ...

  2. linux利用grep查看打印匹配的下几行或前后几行的命令

    转自:http://www.itokit.com/2013/0308/74883.html linux系统中,利用grep打印匹配的上下几行   如果在只是想匹配模式的上下几行,grep可以实现.   ...

  3. linux命令(49):显示文件的指定行,打印中间几行

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  4. linux 命令——39 grep (转)

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  5. 如何在java程序中调用linux命令或者shell脚本

    转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...

  6. Linux命令行和shell编程

    Shell Shell是一个程序,用户输入的命令通过shell来传达给内核或其它程序.用户在linux打开一个终端,终端就会自动调用用户的shell. Linux上的Shell有很多种,用的最多是sh ...

  7. 常用linux命令及shell脚本

    参考:Linux命令大全 分割大文件 Split命令 按行分割(只能是文本文件) $split -l 1000 big_file 前缀 按文件大小分割 $split -b 64m big_file 前 ...

  8. Java执行cmd命令、bat脚本、linux命令,shell脚本等

    1.Windows下执行cmd命令 如复制 D:\tmp\my.txt 到D:\tmp\my_by_only_cmd.txt 现文件如图示: 执行代码: private static void run ...

  9. Linux命令与Shell

    Linux 目录结构及解释 查看命令行执行完位置:  echo $BASH 命令记录 mkdir mkdir命令 用来创建目录. 语法:mkdir (选项)(参数) 主要选项: -m<目标属性& ...

随机推荐

  1. Swift3 JSON字符串和字典互转(JSON字符串转字典和字典转JSON字符串)

    直接上代码吧 1.JSONString转换为字典 /// JSONString转换为字典 /// /// - Parameter jsonString: <#jsonString descrip ...

  2. linux shell 脚本攻略学习7---tr命令详解

    tr命令详解 什么是tr命令?tr,translate的简写,translate的翻译: [trænsˈleit] vi. 翻译, 能被译出 vt. 翻译, 解释, 转化, 转变为, 调动 在这里用到 ...

  3. 【SqlServer】Sql Server 支持的数据类型

    在计算机中数据有两种特征:类型和长度.所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类.    在SQL Server 中每个变量.参数.表达式等都有数据类型.系统提供的数据类型分为几大类 ...

  4. java-容器-ArrayList

    工作中经常会用到Java的集合类,最近不忙了,把相关知识总结一下,便于理解记忆. 打开java.util.ArrayList的源代码,首先映入眼帘的是@author  Josh Bloch(相对于源码 ...

  5. Php廖雪峰教程学习与实战

    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 目录 Python教程 Pyth ...

  6. logstash_output_mongodb插件用途及安装详解

    安装详情参见:http://mojijs.com/2017/03/222639/index.html http://www.jianshu.com/p/8516e51e105d

  7. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

  8. SharePoint自动化部署,利用PowerShell 导入用户至AD——PART II

    这是对上一篇文章<SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户>进行补充.开发时,为了测试和演示,我们往往需要经常性的把用户添加到AD中.数据量小的时候 ...

  9. flowable学习笔记-简单流程概念介绍

    1 Flowable process engine允许我们创建ProcessEngine 对象和使用 Flowable 的API ProcessEngine是线程安全的,他是通过 ProcessEng ...

  10. java-Spring 管理bean例子

    Spring 通过2种方式管理bean 首先要导入Spring的包,(Spring.jar和commonslogging.jar) 或加载分开的... 在src目录下建立applicationCont ...