2014-04-22 49 views
0

我有一個具有以下格式一個巨大的文件:重新編碼一個巨大的文件的

#pair: 0 1 0 1 0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
#pair: 1 2 0 1 1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
#pair: 1 2 1 2 0 0 1 

等等等等 我希望我可以使用Linux命令是要找到每一個以「#pair開始做線:」並移動最後3列直接婁本line.For例如:

#pair: 1 2 1 2 0 0 1 

變化:

#pair: 1 2 1 2 
0 0 1 

非常感謝您提前!

+0

歡迎來到SO。請定義'巨大'。你試過什麼了?你是否看過像'sed'和'awk'這樣的東西? – reto

+0

很高興來到這裏!我的文件有5.769.601行。我試圖尋找一個解決方案,但不幸的是,我不是一個非常好的Linux用戶呢! – user3559605

+0

按今天的標準,幾十兆字節不是「巨大的」。你應該在幾秒鐘內完成。 – tripleee

回答

1

很容易的使用awk:

awk '/^#pair:/ { $6 = "\n" $6 }1' file >newfile 

這假設場數爲常數,而空白的#pair:線的末端是可以容忍的。這兩個假設都可以很容易地修復或解決,但代碼的可讀性會降低。 (使用類似$(NF-2)而不是$6如果字段數量可以改變,但你總是希望最後三個。添加一個簡單的sub()如有必要,修剪空格。)

的正則表達式上與#pair:和行動開始的行相匹配說在第六場之前預先換行。

孤獨的1是一種Awk方式,用於將每一條輸入行打印到標準輸出。

這讀取file並將輸出放置在newfile

+0

工程就像一個魅力!非常感謝你! – user3559605