Объединение столбцов в командной строке с помощью Paste или 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 здесь: Как вставить столбцы из отдельных файлов с помощью 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, дает то же поведение, что и паста.

Любой совет, почему эти файлы ведут себя по-разному?

Спасибо!

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)

Комбинируя два ответа (из комментариев Джайпала + ответ Гленна) вместе, окончательный ответ оказался CR-концом строки.

Для целостного ответа, один из способов диагностики этой проблемы

file filename

если он возвращает что-то вроде ASCII text, with CRLF line terminators, тогда вы знаете, что у вас есть эта проблема. CR = '\r', LF = '\n', поэтому в действительности каждая строка оканчивалась на '\r\n'.

Бег tr -d, "\r" < f1 > tmp && mv tmp f1 удалит все лишние '\ r' из кода, а затем разрешит вставку работать должным образом.

Другие вопросы по тегам