Joining Columns on Command Line with Paste or PR Not Working

[亡魂溺海] 提交于 2019-12-12 15:49:50

问题


So I have two files that I want to take columns out of and join them in a single file.

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,,

I saw the reference to a previous SO question here: How to paste columns from separate files using bash?

but for some reason both the paste and the pr commands are not working for this data set: instead paste -d <(cut -d "," -f 3,7 f1) <(cat f2) just appends a comma to the front of every line of 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, yields the same behavior as paste.

Any advice on why these files are behaving differently?

Thanks!


回答1:


Note that you missed giving the -d option a value.

To put columns 3 and 7 at the beginning of "f2" lines, separated with a comma

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

Accounting for CRLF line endings

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



回答2:


Combining the two answers (from jaypal's comments + glenn's answer) together, the final answer turned out to be, the CR end of line.

For a holistic answer, one way to diagnose this problem is

file filename

if it returns something like ASCII text, with CRLF line terminators, then you know that you have this problem. CR = '\r', LF = '\n', so in reality every line was terminating with '\r\n'.

Running tr -d, "\r" < f1 > tmp && mv tmp f1 will delete all of the extra '\r' from the code and then allow paste to work as expected.



来源:https://stackoverflow.com/questions/22722742/joining-columns-on-command-line-with-paste-or-pr-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!