Awk
awk 段落不起作用
我已經從這裡下載了 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