Я пытаюсь объединить несколько файлов с похожим синтаксисом, как показано ниже. На данный момент я экспериментировал только с двумя файлами. Файлы всегда будут иметь одинаковое количество строк, одну и ту же дату, одно и то же время и сортироваться в том же порядке. Единственное различие должно быть в поле значений.Использование команды объединения UNIX для объединения двух файлов
File1.csv
date,time,value,status
2014/09/10,22:47:25,-0.0000000003542,9
2014/09/10,23:14:25,-0.0000000002892,9
2014/09/10,23:23:46,0.0000000005406,9
2014/09/10,23:41:48,-0.0000000000142,9
2014/09/11,00:18:40,-0.0000000009977,9
File2.csv
date,time,value,status
2014/09/10,22:47:25,0.0000000725578,9
2014/09/10,23:14:25,-0.0000000283722,9
2014/09/10,23:23:46,-0.0000000368988,9
2014/09/10,23:41:48,-0.0000000675033,9
2014/09/11,00:18:40,-0.0000000774759,9
Желаемая выход
date,time,value,value
2014/09/10,22:47:25,-0.0000000003542,0.0000000725578
2014/09/10,23:14:25,-0.0000000002892,-0.0000000283722
2014/09/10,23:23:46,0.0000000005406,-0.0000000368988
2014/09/10,23:41:48,-0.0000000000142,-0.0000000675033
2014/09/11,00:18:40,-0.0000000009977,-0.0000000774759
Я не в том чтобы сохранить значение статуса в объединенных результатах. Я пробовал несколько вариантов команды присоединиться с последним существом:
join -t, -a 1 -a 2 -o 1.1 1.2 1.3 2.3 File1.csv File2.csv
К сожалению, я получаю результат, подобный ниже, где он не показывает данные из File1.csv на всех.
Выходной ток
date,time,value,value
,,,0.0000000725578
,,,-0.0000000283722
,,,-0.0000000368988
,,,-0.0000000675033
,,,-0.0000000774759
,,,0.0000001042118
Кто-нибудь есть какие-либо предложения?
Спасибо.
UPDATE
Как следить за этим, я вернулся и обновил входные файлы объединить даты и времени в одном поле, как показано ниже.
File1.csv
дата_время, значение, состояние
2014/09/10 22: 47: 25, -0.0000000003542,9
2014/09/10 23:14:25, -0.0000000002892,9
2014/09/10 23: 23: 46,0.0000000005406,9
2014/09/10 23: 41: 48, -0.0000000000142,9
2014/09/11 00:18:40, -0.0000000009977,9
File2.csv
дата_время, значение, состояние
2014/09/10 22: 47: 25,0.0000000725578,9
2014/09/10 23: 14: 25, -0,0000000283722 , 9
2014/09/10 23: 23: 46, -0.0000000368988,9
2014/09/10 23: 41: 48, -0.0000000675033,9
2014/09/11 00: 18: 40, - 0.0000000774759,9
Как таковой, я обновил команду присоединиться к выглядеть следующим образом:
присоединиться к -t, -a 1 -a 2 -o "1.1 1,2 2,2" File1. csv File2.csv
К сожалению, я все еще получаю вывод, который, кажется, опускает содержимое файла File1.csv.
Выходной ток
date_time, значение, значение
,, +0,0000000725578
,, - +0,0000000283722
,, - +0,0000000368988
,, - +0,0000000675033
,, - 0,0000000774759
ОБНОВЛЕНИЕ
Кажется, что проблема связана с заголовком в каждом файле. Если удалить заголовок из файлов, а затем попробуйте следующее присоединиться строку:
присоединиться к -t, -a 1 -a 2 -о «1,1 1,2 2,2» File1.csv File2.csv
Это дает следующий результат: желаемый
2014/09/10 22: 47: 25, -0.0000000003542,0.0000000725578
2014/09/10 23: 14: 25, -0,0000000002892, -0,0000000283722
2014/09/10 23: 23: 46,0.0000000005406, -0.0000000368988
2014/09/10 23: 41: 48, -0,0000000000142, -0,0000000675033
2014/09/11 00: 18: 40, -0,0000000009977, -0,0000000774759
Кто-нибудь знает способ сделать join игнорировать заголовок для входных файлов?
Спасибо,
Кажется, вам лучше сделать это в скрипте, чтобы вы могли проверить, действительно ли первые три столбца действительно равны, а затем присоединиться. – user3885927
'join' может присоединяться только к одному полю и по умолчанию относится к первому полю. У вас несколько строк с одинаковой датой, так что это не сработает. – Barmar