2014-03-28 35 views
3

所以我有兩個文件需要將列從列中移出並將它們連接到單個文件中。使用粘貼或PR不工作來連接命令行上的列

F1:

02/10/2013,16:00:00.091,123.82,OTCX,GLO,,123.82 
02/10/2013,16:00:03.072,123.766,FXN,NAM,,123.766 
02/10/2013,16:00:03.491,123.769,FXN,,,123.769 
02/10/2013,16:00:03.565,123.79,COMM,ASI,HKG,123.79 
02/10/2013,16:00:03.721,123.769,FXN,NAM,NYC,123.769 
02/10/2013,16:00:04.194,123.81,AKM,EUR,MOW,123.81 
02/10/2013,16:00:06.130,123.764,FXN,NAM,NYC,123.764 
02/10/2013,16:00:06.330,123.764,FXN,,,123.764 
02/10/2013,16:00:08.989,123.766,FXN,,,123.766 
02/10/2013,16:00:09.034,123.791,FXN,,,123.791 

F2:

02/10/2013,16:00:00.091,123.82,123.83,OTCX,GLO, 
02/10/2013,16:00:03.072,123.766,123.888,FXN,NAM, 
02/10/2013,16:00:03.491,123.769,123.888,FXN,, 
02/10/2013,16:00:03.565,123.79,123.87,COMM,ASI,HKG 
02/10/2013,16:00:03.721,123.769,123.891,FXN,NAM,NYC 
02/10/2013,16:00:04.194,123.81,123.85,AKM,EUR,MOW 
02/10/2013,16:00:06.130,123.764,123.891,FXN,NAM,NYC 
02/10/2013,16:00:06.330,123.764,123.888,FXN,, 
02/10/2013,16:00:08.989,123.766,123.886,FXN,, 
02/10/2013,16:00:09.034,123.791,123.861,FXN,, 

只見參照以前的SO問題在這裏:How to paste columns from separate files using bash?

,但由於某種原因,無論是pr命令不適用於此數據集:而不是paste -d <(cut -d "," -f 3,7 f1) <(cat f2)只是追加逗號f2的每一行

,02/10/2013,16:00:00.091,123.82,123.83,OTCX,GLO, 
,02/10/2013,16:00:03.072,123.766,123.888,FXN,NAM, 
,02/10/2013,16:00:03.491,123.769,123.888,FXN,, 
,02/10/2013,16:00:03.565,123.79,123.87,COMM,ASI,HKG 
,02/10/2013,16:00:03.721,123.769,123.891,FXN,NAM,NYC 
,02/10/2013,16:00:04.194,123.81,123.85,AKM,EUR,MOW 
,02/10/2013,16:00:06.130,123.764,123.891,FXN,NAM,NYC 
,02/10/2013,16:00:06.330,123.764,123.888,FXN,, 
,02/10/2013,16:00:08.989,123.766,123.886,FXN,, 
,02/10/2013,16:00:09.034,123.791,123.861,FXN,, 

pr -mts,產生相同的行爲糊的前部。

有關這些文件爲什麼行爲不同的任何建議?

謝謝!

+0

你能展示你的預期產出的樣本嗎? – anubhava

+1

這些文件是否具有DOS風格的行結束符? –

+1

是的,那絕對是'CR'把光標放回行首,覆蓋第一個文件打印的內容。在運行下面的@glennjackman提供的命令之前(它也修復了你的命令中的一個bug)之前執行此操作 - 「tr -d」\\「< f1 > tmp && mv tmp f1' –

回答

2

請注意,您錯過了給-d選項提供的值。

爲了把柱3和7在 「F2」 行的開頭,用逗號

paste -d, <(cut -d, -f 3,7 f1) f2 

會計CRLF行結束

paste -d, <(sed 's/\r$//' f1 | cut -d, -f 3,7) <(sed 's/\r$//' f2) 
+0

'<(貓f2)'是貓的一種無用的用法。 –

+0

+1修復3個問題! UUoC,缺少分隔符和識別「CR」。 –

+0

謝謝格倫 - 我想給你和傑貝爾的信貸,但你的答案不包括整個故事(請參閱下面的答案) - 如果你想修改你的答案包括一切,不好接受你的答案。 –

0

兩個答案結合分離(來自jaypal的評論+ glenn的回答),最終答案竟然是,CR的結束。

對於整體的答案,診斷這個問題的一種方法是

file filename 

如果返回類似ASCII text, with CRLF line terminators,那麼你知道你有這樣的問題。 CR ='\ r',LF ='\ n',所以實際上每一行都以'\ r \ n'結尾。

運行tr -d, "\r" <f1> tmp && mv tmp f1將從代碼中刪除所有額外的'\ r',然後允許粘貼按預期工作。