linux(39):shell 打印偶数行,奇数行 ,行号

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

时间: 2024-11-08 11:48:27

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

linux下shell统计文件目录下所有代码行数

功能,统计某一目录下所有文件代码行数: 例如统计某一目录下所有.c结尾的文件代码行数:find . -name "*.c"|xargs cat|grep -v ^$|wc -l ^C 使用方法:打开终端,cd至要统计代码的文件目录下,运行此命令即可.

EXCEL 偶数、奇数行分开求和公式

例举 : A1行是 123 A2行是 321 A3行是 456 A4行是 789我是加的是A1+A3得出的和还有加的是A2+A4得出的和因为要A1+A3一直加到A601,我用很笨的方式像这样子一个个加过来,所以EXCEL说公式太复杂,加不出来,我只能在自己敲计算器加.请求大家看看有没有简单的公式可以让偶数.奇数分开求和. =sumproduct(mod(row(a1:a601),2)*a1:a601) =sumproduct((1-mod(row(a1:a601),2))*a1:a601) 奇数

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

linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 $grep -C 5 'parttern' inputfile //打印匹配行的前后5行 $grep -A 5 'parttern' inputfile //打印匹配行的后5行 $grep -B 5 'parttern' inputfile //打印匹配行的前5行 查看mysql慢日志中ip地址为192.168

Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)

linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat filename | head -n 3000 | tail -n +1000 *注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n +1000:从1000行开始显示,显示1000行以后的 head -n 100

Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具

查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里面的叹号好像不能起到清除空行的效果,改为d;fdupes --recurse A/ B/ | sed '/^A/d; /^$/d; s/.*/"&"/' | xargs rm 但还有个小问题,如果A里面有重复的文件,但这文件不在B中,fdupes也是会列为结果,导致误删,要再想想

打印杨辉三角形的前10行。

打印杨辉三角形的前10行.杨辉三角形如下图: 1                      1 1   1                   1  1 1   2   1                1  2  1 1   3   3   1             1  3  3  1 1   4   6   4   1           1  4  6  4  1 [图5-1]                  [图5-2] [问题分析]观察图5-1,大家不容易找到规律,但是如果将它转

第三篇:Linux的基本操作与文件管理(纯命令行模式下)(上)

与Windows做对比来介绍Linux的基本操作方法与文件管理!(纯命令行模式下,为何要强调是命令行呢?因为在第二篇结尾我说明了,运维工作中几乎都是在用命令行操作的) 为什么要和Windows做对比呢?因为我当初学习Linux时整个脑袋完全没有它的概念,一直在想linux的"C盘.D盘"在哪里呢?怎么安装和卸载一些程序呢?怎么创建文件夹和创建文档? (其实把linux和Windows对比学习的方法很不科学,不过我笨人有笨办法呗,这么学法我感觉还是挺快的,一旦上手linux后慢慢你就懂了

linux 如何显示一个文件的某几行(中间几行)

linux中tail命令---用于查看文件内容 最基本的是cat.more和less. 1. 如果你只想看文件的前5行,可以使用head命令,如: head -5 /etc/passwd 2. 如果你想查看文件的后10行,可以使用tail命令,如: tail -10 /etc/passwd 或 tail -n 10 /etc/passwd tail -f /var/log/messages 参数-f使tail不停地去读最新的内容,这样有实时监视的效果 用Ctrl+c来终止! 3. 查看文件中间一

Shell遍历文件,对每行进行正则匹配

Shell查看文件的最后5行,并对每行进行正则匹配,代码如下: #!/bin/sh pattern="HeartBeat" tail -n 5 /home/test/log/log_20150205.log | while read line do if [[ $line =~ $pattern ]] then echo "Match" else echo "No match" fi echo $line done