bash - 只打印多个行块
问题描述
输入由许多行块组成,由空行分隔我需要在打印中删除单行块剩余的 >1 行块
示例输入:
block1
block2
block2
block2
block3
block4
block4
block5
block6
block6
预期输出:
block2
block2
block2
block4
block4
block6
block6
解决方案
这可以通过重新定义字段分隔符和记录分隔符使用awk轻松完成。
首先,重要的是要认识到awk的两个最重要的概念是记录和字段。
stdin
通过各种方式(或)输入 awk 的输入被逐条getline
读取,其中每条记录由定义的记录分隔符分隔RS
。由于RS
默认情况下是 <newline> 字符\n
,因此记录实际上是一行,因此 awk 会逐行处理默认文件。
当读取记录/行时,awk 会将记录拆分为字段,其中每个字段由字段分隔符FS
(可以是正则表达式)分隔。默认情况下,字段分隔符FS
设置为任何 <blank> 字符序列。这意味着,默认情况下,每个字段都是一个单词。如果重新定义FS
,字段会有所不同。
一个特殊的记录分隔符是空的RS=""
,因为它定义了RS
和FS
如果
RS
为 null,则记录由 <newline> 加上一个或多个空行组成的序列分隔,前导或尾随空行不应导致输入的开头或结尾处为空记录,并且 <newline> 应始终是一个字段分隔符,不管 的值FS
是什么。来源:awk POSIX 标准
因此,您可以执行以下操作:
awk 'BEGIN{RS="";ORS="\n\n"}(NF>1)' file
推荐阅读
- elasticsearch - 弹性搜索显示“START_OBJECT 的未知键”异常
- javascript - 如何重复 classList.add()
- java - 将变量传递给paintComponent方法
- c# - 通过在 Unity 中计算增量位置来压缩 Vector3 列表
- quarkus - 来自另一个 maven 模块的 Quarkus Qute 模板位置
- texas-instruments - 我需要做什么才能安装最新版本的 Python 应用程序?TI-84 Plus CE-T Python 版
- scala - json4s 抛出 NoClassDefFoundError: java/sql/Timestamp
- mql4 - 无论单击“是”还是“否”按钮,消息框都会关闭交易
- javascript - 从 generateDataKeyPairWithoutPlaintext() 获取字符串数据
- python - 关于 Python 简写的问题