![awk 段落不起作用](https://linux22.com/image/134694/awk%20%E6%AE%B5%E8%90%BD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我已从以下位置下载了 KingBase Lite 2018 Update 3 文件这里。我现在想要从单个事件中提取数据,例如“FIDE Candidates 2018”:我想要获取包含此文本及其下面的段落的所有段落,因此我拥有每个游戏的整个 pgn。
为了首先获取包含文本的段落,我遵循这些建议。
但是,当我尝试时awk -v RS='' -v ORS='\n\n' '/FIDE Candidates 2018/' KingBaseLite2018-03.pgn
,它只打印整个文件。当我搜索一个不存在的单词时,它不会打印任何内容。所以我假设它正确地进行了搜索,但它在某种程度上没有正确地切入新行。该文件中的新行字符可能会有些尴尬。当我尝试上述链接中的其他建议(例如使用 perl)时,我得到了相同的结果。
我现在可以做什么来获取该段落?我怎样才能在下面添加一段内容?
答案1
我下载并解压缩了该文件,行结尾是 CRLF,因此您需要考虑到这一点,可以使用类似的工具fromdos
,或者如果您不想修改该文件,您可以告诉 Perl 您希望它用它的:crlf
PerlIO层,这就是我在下面使用PERLIO
环境变量所做的事情。 (还有其他方法可以更改图层,但对于单行来说,这是最简单的方法。)
我正在使用触发器运算符...
仅提取与正则表达式匹配的段落以及以下匹配的段落/^1\./
(因为文件中的所有段落都以 或 开头[
)1.
。
wget http://kingbase-chess.net/download/650 -O KingBaseLite2018-03.zip
unzip KingBaseLite2018-03.zip
PERLIO=:crlf perl -00ne 'print if /"FIDE Candidates 2018"/.../^1\./' KingBaseLite2018-03.pgn