老男孩教育每日一题-2017年3月25日-将一个文本的奇数行和偶数行合并
-
方法一:sed版本
N表示读取下一行,给sed处理,也就是sed同时处理2行。
-
方法二:xargs初级版
有点玩赖了,每一行都是7列,那么两行在一起就是14列了。
-
方法三:xargs升级版
xargs默认使用的是空格为分隔符,通过-d指定新的分隔符,这里修改为\n回车换行为分隔符。
-n2表示以回车为换行符后,我要每行显示两列,也就是两行。
相当于实现了合并奇偶行的作用。
-
方法三:awk方法
getline是读取下一行的意思。
把当前行存放起来,放到lastline变量中。然后读取下一行,然后使用print lastline和$0显示上一行和当前行的内容。
-
方法四:awk-getline升级版
awk中getline表示读取下一行。
同时他还有多种形式,getlinelastline ##表示,把下一行的内容放入变量lastline中。
然后通过printlastline,$0输出 #表示输出lastline的内容(上一行的内容)和$0(当前行的内容)。
小缺点:
此方法会忽略文件的第一行。
-
方法五:paste-sd参数
说明:
paste平时主要用于合并两个文件的内容。
这里通过-s参数可以把一个或多个文件的内容,第一行连接上第二行,连接第三行,。。。。这样的形式放在一起。
组合成一行!注意加上-s后会把文件变为一行。
例子:
[
注意:cat -n是为了给结果加上个行号。
不难发现,结果就一行。这是-s参数的作用。
继续看-d参数
-d参数可以指定,paste输出的时候每一行以什么"结束"(或者叫分隔符)。
-d " \n"表示第一行以空格结束,第二行以回车结束,第三行以空格结束,第四行以回车结束,等等。
-
方法六:
说明:
通过man paste不难发现,paste也支持 通过 - 来读取文件。
一个-减号简单可以理解为文件的一行。
paste -d " " - - <filename
表示
每次读取文件的两行,第一行的结束标记为空格。
-
方法七:判断奇偶行并显示
单独判断奇偶行,如果是奇数行就显示内容,如果是偶数行显示内容但是不输出回车(printf实现)。
-
方法八:判断奇偶行显示-升级版
三目运算符,相当于上面的ifelse的内容。
-
方法九:awk判断方法
next表示结束处理当前行的内容,处理下一行。
注意如果执行了next后,后面{}的内容不会执行。
-
方法十:awk内置变量方法
ORS表示输出记录分隔符。
output record separator
简单理解就是控制awk如何显示每行的,在每一行的结尾显示什么。
默认是回车。
这里通过后面的判断来实现了如果是奇数行每一行就以空格结束,如果是偶数行就以回车结束。
相当于下面的例子:

浙公网安备 33010602011771号