Объединение файлов .csv на Mac OSX терминал не использует новую строку между - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть несколько CSV-файлов, которые я хочу объединить в один.

a.csv

Field1,Field2,Field3
1,2,3
4,5,6

b.csv

Field4,Field5,Field6
7,8,9
10,11,12

Когда я запускаю следующую команду на Mac OSX Terminal

cat *.csv >merged.csv

файлы объединяются следующим образом -

Field1,Field2,Field3
1,2,3
4,5,6Field4,Field5,Field6
7,8,9
10,11,12

Однако я хотел бы, чтобы объединение происходило в отдельной строке.

Field1,Field2,Field3
1,2,3
4,5,6
Field4,Field5,Field6
7,8,9
10,11,12

Как это можно сделать лучше всего?

cat *.csv + new line >merged.csv

1 Ответ

0 голосов
/ 04 декабря 2018

Проблема в том, что в вашем первом файле (и, вероятно, также и в остальных) нет новой строки в конце последней строки.В текстовых файлах в стиле Unix каждая строка должна иметь в конце символ конца строки.Результат: когда вы объединяете файлы вместе, в конце строки «4,5,6» нет терминатора, поэтому «Field4, Field5, Field6» обрабатываются как часть одной строки.

К счастьюесть довольно простое решение: используйте что-то, что обрабатывает (и добавляет) файлы построчно, а не просто слепо склеивает их.Вот пример использования awk:

awk '{print $0}' *.csv

Кстати, я бы не рекомендовал использовать формат somecmd *.csv >merged.csv, потому что merged.csv может оказаться как входным, так и выходным, что приведет к странным результатам.Сложно ли это случиться (и имеет ли это значение), но лучше всего избежать этой проблемы, используя более конкретный шаблон с подстановочными знаками, помещая ввод и вывод в разные каталоги или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...