2013-05-30 64 views
2

我想根據twitter數據計算一些新聞文章的流行度。然而,在檢索推文時,我忘了逃避以不可用文件結尾的字符。在linux下解析一個文件

以下是文件中的一行:

1369283975$,$337427565662830592$,$0$,$username$,$Average U.S. 401(k) balance tops $80$,$000$,$ up 75 pct since 2009 http://t.co/etHHMUFpoo #news$,$http://www.reuters.com/article/2013/05/23/funds-fidelity-401k-idUSL2N0E31ZC20130523?feedType=RSS&feedName=marketsNews 

的「$,$」模式不僅出現作爲字段分隔符,而且在鳴叫,從那裏我想刪除它。 一條正確的路線是:

1369283975$,$337427565662830592$,$0$,$username$,$Average U.S. 401(k) balance tops $80000 up 75 pct since 2009 http://t.co/etHHMUFpoo #news$,$http://www.reuters.com/article/2013/05/23/funds-fidelity-401k-idUSL2N0E31ZC20130523?feedType=RSS&feedName=marketsNews 

我試圖用削減和sed,但我沒有得到我想要的結果。什麼是解決這個問題的好策略?

+0

我看到的唯一區別是數字'$ $ 80,$ 000個,$'到$ 80000。這樣對嗎? – fedorqui

+0

是的,我想有

+1

問題是,你有美元的文本'$ 80000',打破了規則。最好使用另一個字段分隔符。 – fedorqui

回答

4

如果我們假設有從未在時間,ID,銳推,用戶名和鏈接區多餘的分隔符,那麼你可以取中間部分,並從中刪除所有$,$,例如像這樣:

perl -ne 'chomp; @a=split(/\$,\$/); $_ = join("", @a[4..($#a-1)]); print join("\$,\$", @a[0..3], $_, $a[$#a]), "\n"' < data.txt 

這裏做的事情:

  1. 拆分使用$,$作爲定界符
  2. 取中間部分中的線=字段[4] ..領域[N-1]
  3. 通過$,$重新加入第一4個字段,固定中間部分,最後一個字段(鏈接)

這適用於你的榜樣,但我不知道,你可能有什麼其他角落的情況。

驗證結果的一個好方法是統計所有行上$,$的出現次數爲6次。您可以通過管道將結果這個做那個:

... | perl -ne 'print scalar split(/\$,\$/), "\n"' | sort -u 

(應該輸出一行,以 「6」)

+0

這工作完美!在測試你的代碼之後,我每行有6次出現'$,$'。謝謝。 – catalaur

+0

@janos很好地完成了! +1 –