Awk

awk 段落不起作用

  • June 6, 2018

我已經從這裡下載了 KingBase Lite 2018 Update 3 文件。我現在想從單個事件中提取數據,例如“FIDE Candidates 2018”:我想獲取包含此文本的所有段落及其下方的段落,因此我擁有每個遊戲的整個 pgn。

為了首先獲取包含文本的段落,我遵循了這些建議

但是,當我嘗試時awk -v RS='' -v ORS='\n\n' '/FIDE Candidates 2018/' KingBaseLite2018-03.pgn,它只會列印整個文件。當我搜尋一個不存在的單詞時,它不會列印任何內容。所以我認為它正確地進行了搜尋,但它以某種方式沒有正確地切入新行。該文件中的換行符可能有些尷尬。當我嘗試上述連結中的其他建議(例如使用 perl)時,我得到了相同的結果。

我現在可以做什麼來獲得該段落?我怎樣才能在下麵包含一段?

我下載並解壓縮了文件,行尾是 CRLF,所以你需要考慮到這一點,或者通過使用類似的工具fromdos,或者如果你不想修改文件,你可以告訴 Perl 你想要它用它的:crlf PerlIO層做翻譯,這就是我在下面用PERLIO環境變數做的事情。(還有其他方法可以更改圖層,但對於單行來說,這種方法最簡單。)

我正在使用觸發器運算符...僅提取與正則表達式匹配的段落以及以下匹配的段落(因為文件中的所有段落都以or/^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

引用自:https://unix.stackexchange.com/questions/448149