2010-02-11 51 views
0

我有一個這樣的名單:如何轉換垂直名值對的CSV列表(水平)設置

GTPYANJ   695848 
GTPYANJ   27811 
FPORTAL3  432532 

我希望把它變成這個使用正則表達式:

GTPYANJ,695848,27811 
FPORTAL3,432532 

建議?

+1

似乎對我來說,通過不使用正則表達式會容易得多。 – 2010-02-11 21:31:19

+2

我的建議:不要使用正則表達式。 – 2010-02-11 21:34:04

+0

這是一次性報告,寫一些代碼會過度。否則,它會很容易閱讀並填充散列表並使用它。 – Maladon 2010-02-11 21:40:52

回答

0

加載到jEdit的(或記事本+ +,或者可以搜索/通過正則表達式替換一些其他的編輯器。

第1步是使確保分隔符是一個選項卡。

然後,搜索

^(.*)\t(.*)\n\1 

,並替換成

$1\t$2, 

重複查找/替換所有,直到沒有找到匹配。

+1

這當然只適用於您非常特殊的文件。如果你拋出任何額外的空白空間,或者你的列表沒有排序,這將會慘敗。更何況,如果你有成千上萬甚至上百個條目,你會被卡在手邊重複搜索/替換,因爲我沒有意識到任何搜索替換可以無限期地從頭開始,直到沒有剩下的匹配。 – 2010-02-11 21:50:17

+0

好點。對於我的一次性數據處理任務來說,它工作得很好。作爲一個程序化的解決方案,它需要一種不同的方法。 – Maladon 2012-02-28 14:49:14

0

Perl的一個班輪:

perl -e 'while(<>) { chomp; ($tag, $num) = split /\s+/; $tmp{$tag} .= ",$num"; } foreach $t (sort keys %tmp) { print $t.$tmp{$t}."\n" } ' myfile.txt 

不是試圖蹣跚一起以多路的正則表達式,這將極有可能突破一對夫婦的時候,你得到它的權利以前容易得多,而這依賴於數據是排序,這可能需要第二個正則表達式在年底重新格式化一切......