2017-03-06 62 views
-2

我有幾十個長文本文件(每個10k-100k記錄),其中一些字符由於粗心處理而丟失並被問號替換。我需要建立一個損壞的單詞列表。包含問號的提取詞

我敢肯定,最有效的方法是用sed或awk或其他bash工具正則表達文件,但我無法編寫正確的正則表達式。

這裏有幾個樣本記錄進行處理:

?ilkin, Aleksandr, Zahhar, isa 
?igadlo-?van, Maria, Karl, abikaasa, 27.10.45, Veli?anõ raj. 

所需的輸出將是:

?ilkin 
?igadlo-?van 
Veli?anõ 

我的最好成績看似很遠,從記錄開始僅檢索詞:

awk '$1 ~/\?/ {print $1}' test.txt 

- >

?ilkin, 
?igadlo-?van, 
+0

你打算使用什麼? Python,Java等。請嘗試自己編寫一些代碼,然後詢問直接問題。例如可能發生的錯誤。 –

+0

其實我已經準備好使用任何作品。 我期望一些簡單的bash工具,但會欣賞perl/node/python – michelek

+0

請首先嚐試編寫一些代碼。無法爲你做所有的工作。 –

回答

1

我需要建立的損壞的話

如果目的是爲了只搜索匹配grep將是最快速而強大的工具列表:

grep -Po '(^|)([^?\s]*?\?[^\s,]*?)(?=\s|,|$)' test.txt 

輸出:

?ilkin 
?igadlo-?van 
Veli?anõ 

說明

-P選項,允許perl的定期expresssions

-o選項,講述只打印匹配的子

(^|) - 字符串或空的開頭匹配值(在這種情況下我們不能使用文字邊界定位點\b導致問號?被視爲詞邊界)

[^?\s]*? - 如果發生

\?[^\s,]*?任何字符匹配除了?和空白\s - 問號?後跟任意字符匹配除空白\s,(其可以是在正確的字邊界)

(?=\s|,|$) - 前瞻肯定斷言,確保所需的子字符串後面有空格\s,逗號,或放在字符串末尾

+0

工程就像一個魅力! – michelek

+0

@michelek,不客氣 – RomanPerekhrest