У меня есть пять файлов csv, которые я хотел бы с paste
вместе с использованием функции оболочки. Это в основном выполняет конкатенацию строк в нескольких текстовых файлах. То, что я за ним, приведено в примере 8 in this tutorialКак использовать команду вставки unix/shell для нескольких файлов
Я делаю это с Python через subprocess.call()
, однако выполнение этого непосредственно в терминале дает такие же запутывающие результаты.
Мои файлы все табуляции (который является разделителем по умолчанию функции вставки)
Когда я использую функцию на 2, 3, ... п файлов, то кажется, что заголовки второй к n'th файлам добавляются как вторая строка с заголовком только первого файла, появляющегося в первой строке.
Вот моя команда:
paste outfile.txt tmp_1.txt tmp_2.txt tmp_3.txt tmp_4 > final.txt
Вот результат:
col1 col2 col3 # <-- 1st file has 3 columns
col4 col5 # <-- 2nd file has 2 columns
col6 # <-- 3rd file has 1 columns
col7 # <-- 4th file has 1 columns
col8 col9 # <-- 5th file has 2 columns
После этого, однако, ряды вести по-другому (последовательно до конца файлов) :
col1 col2 col3
col4 col5 col6 col6 col7 col8 col9
col1 col2 col3
col4 col5 col6 col6 col7 col8 col9
[Эти два кодовых блоков следуют по друг от друга]
Я не могу найти больше опций, которые я мог указать в this documentation, явно вводя -d'\t'
ничего не меняет. Я также пытался меньше или больше файлов, изменение Одера файлов (в случае, если мой первый один имеет несколько carrriage возвращаются и т.д. в нем, но результаты всегда одинаковы.
Update # 1
Вот кусок вывода команды на @shellter рекомендуется в комментариях: cat -vet file1.txt file2.txt ... file5.txt | less
:
Col1^ICol2^ICol3^M$
Some text was here^I2^I-3^M$
Some text was here^I2^I-1^M$
Some text was here^I2^I-2^M$
Some text was here^I2^I-1^M$
Вы можете увидеть ^I
маркеры для вкладок и ^M
плюс $
для конца-строки/перевозки -return/newline.
обновление # 2
Применив функцию оболочки dos2unix
мои файлы:
dos2unix file1.txt file2.txt ... file5.txt
исходная функция пасты я изначально работает, как ожидалось. Из вывода окончательного файла мы можем видеть, какие маркеры остаются, являются только полезной сортировкой. Здесь желаемое из, достигается:
col1 col2 col3 col4 col5 col6 col6 col7 col8 col9
col1 col2 col3 col4 col5 col6 col6 col7 col8 col9
col1 col2 col3 col4 col5 col6 col6 col7 col8 col9
А вот выход из функции, используемой для проверки: cat -vet file1.txt ...
:
Col1^ICol2^ICol3^ICol4^ICol5^ICol6^Col7^ICol8^ICol9$
Col1^ICol2^ICol3^ICol4^ICol5^ICol6^Col7^ICol8^ICol9$
Col1^ICol2^ICol3^ICol4^ICol5^ICol6^Col7^ICol8^ICol9$
Нет ^M
маркеры быть найдены.
У вас есть какие-то окончания линии DOS, запутывающие вещи? То есть, у файлов есть окончания строк CRLF? Можете ли вы показать первые 3 или 4 строки каждого из 5 входных файлов? –
Джонатан может быть на что-то. Используйте 'cat -vet файл ... file. | Less' и Ищите^M в конце каждой строки. Если вы видите это, выйдите из 'less', а затем используйте' dos2unix file file2 .... fileN'. Превосходно иллюстрированная проблема. Держите проводку, пожалуйста! Удачи. – shellter
Спасибо, ребята, вы были правы. Команда @shellter показала, что строки имеют '^ M' в конце. Теперь у меня есть проблема, что я не могу установить dos2unix ... Я попытаюсь решить эту проблему, а затем вернуться. Тем временем я покажу первые строки одного из файлов в моем сообщении. –