Shell实现文件中的N行合并为一行
背景
有时候想从网页上把一些表格类数据下载下来,但是页面有没有提供下载功能,直接复制下来粘贴到文本文件每个列又换行成独自的一行,如何实现自动转化呢?核心就是文件行的合并
实现方式
1 | # 这里的N是5,5行合并为1行;合并之后的分隔符为 '|' |
扩展
1.1、sed中的**n**
** 和 **N**
、****-n**
** **
首先要知道sed有个 pattern space
, 在读取行处理行都是在该空间中处理的。n 和 N 的目的就是读取下一行到pattern space
, 区别在于
n
读取下一行进行p命令输出的时候,是针对的读入的下一行
,不会输出之前已经读入的N
读取下一行之后,会把之前读入的和刚才读入的作为一行
进行处理,比如打印-n
只显示匹配处理的行
小技巧: 输出100以内的奇偶数
1 | # 奇数 |
1.2、awk 常用内置变量
ORS output record seperator 输出记录分隔符
RS record seperator 记录分隔符
FS field seperator 字段分隔符,默认空格
OFS out of field seperator 输出字段分隔符
NF 一条记录的字段数目
NR 已经读出的记录数,即行号,从1开始
Shell实现文件中的N行合并为一行