首页 > 解决方案 > 获取文件中超过一定行数的所有文本块

问题描述

文本块由空行分隔,例如:

AAA
BBB

AAA'
BBB'

AAA
BBB
CCC

我想获得最后一个超过 2 行的文本块。我知道我可以编写一个 Python 脚本。

我怎样才能通过使用一些命令行来做到这一点?

标签: shell

解决方案


编辑:我想我误解了“获取最后一个文本块”。简单地打印超过 2 行的所有段落:

awk -v RS= -v ORS='\n\n' -F '\n' 'NF>2' file
perl -F'\n' -00e 'print if $#F >= 2' file

awk -v RS= -F '\n' 'NF>2 {rec=$0} END {if (rec!="") print rec}' file

RS设置为空值启用“段落模式”。FS已设置为\n(因此这NF将等于每个段落中的行数)。awk 程序保存符合条件的最新记录NF>2并在最后打印出来。


使用类似的想法(除了 perl 对字段数的计算方式不同):

perl -F'\n' -l -00e '$rec=$_ if $#F >= 2; END {print $rec if defined $rec}' file

根据文件的内容,向后读取文件可能会更快,例如tac

tac file | perl -F'\n' -l -00e 'if ($#F >= 2) {print $_; exit}' | tac

推荐阅读