考慮下面的數據集。每個塊開始都是一個'case'。在真實的數據集中,我有數十萬個案例。如果案例中只有一個單詞「排除」(例如10001),我想用「0」替換「排除」一詞。如何在特定子集的數據中只出現一次特定字詞?
如果我通過行循環,我可以統計在每種情況下有多少「排除」。但是,如果只有一行使用「排除」一詞,我不知道如何回到該行並替換該單詞。
我該怎麼做?
10001
M1|F1|SP1;12;12;12;11;13;10;Exclusion;D16S539
M1|F1|SP1;12;10;12;9;11;9;3.60;D16S
M1|F1|SP1;12;10;10;7;11;7;20.00;D7S
M1|F1|SP1;13;12;12;12;12;12;3.91;D13S
M1|F1|SP1;11;11;13;11;13;11;3.27;D5S
M1|F1|SP1;14;12;14;10;12;10;1.99;CSF
10002
M1|F1|SP1;8;13;13;8;8;12;2.91;D16S
M1|F1|SP1;13;11;13;10;10;10;4.13;D7S
M1|F1|SP1;12;9;12;10;11;16;Exclusion;D13S
M1|F1|SP1;12;10;12;10;14;15;Exclusion;D5S
M1|F1|SP1;13;10;10;10;17;18;Exclusion;CSF
優雅!性能方面,我認爲這與@ChuckCottrill的解決方案非常相似,甚至可能稍微好一些? –
謝謝你們所有的解決方案。 ikegami,這將是一個輕鬆的步驟,修改這一點,以取代「排除」一詞,當它不僅一次,但最多兩次?我試過「if $ block!〜/\bExclusion\b.*\bExclusion\b.*\bExclusion\b/s;」。它的工作原理,但只取代第一次出現。 – vitor
使用's /// g'。 '$ block =〜s/\ bExclusion \ b/0/g if $ block!〜/ \ bExclusion \ b(?:。* \ bExclusion \ b){2}/s;'。 – ikegami