Мне нужно объединить сотни .txt-файлов рядом друг с другом. Я пытался использовать некоторые из уже отвеченных вопросов на форумах, но хотя файлы и объединяются, второй и третий (и так далее) файлы каждый раз смещаются на одну строку вниз. Я хотел бы, чтобы они оставались выровненными, все файлы имели одинаковое количество строк (если не символов в каждой строке). Мои файлы разделены запятыми, и моя конечная цель — заставить их все преуспеть в обработке данных.
мои файлы
591.txt
CT Analyser, Version: 1.9.3.2
Date and time,25.07.2014 09:56
Operator identity,svy557
Computer name,UT156805
Computation time,00:08:24
Dataset,591_right__rec_tra_voi
Location,D:\Pam Mandible Copy\591\Right\Region1\
583.txt
CT Analyser, Version: 1.9.3.2
Date and time,31.07.2014 15:14
Operator identity,svy557
Computer name,UT156805
Computation time,00:10:04
Dataset,583_left__rec_tra
Location,D:\Pam Mandible Copy\583 Left\Reoriented\
Я пробовал что-то вроде следующего:
paste 591.txt 593.txt | column -s $'\t' -t
он объединяется следующим образом (второй файл на одну строку ниже, а не строки рядом друг с другом):
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:55
Operator identity,svy557
Operator identity,svy557
Computer name,UT156805
Computer name,UT156805
Computation time,00:08:24
Computation time,00:08:13
Dataset,591_right__rec_tra_voi
Dataset,583_right__rec_tra_voi
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\583 Right\Region1\
Это сводит с ума уже несколько дней, и любая помощь будет высоко оценена, я довольно новичок в UNIX, поэтому я пытаюсь узнать достаточно, чтобы сделать это, а затем еще несколько проектов, которые требуют подобных навыков. Фактические файлы имеют около 50 строк, и все они выглядят так, если я попытаюсь сделать больше одного файла с чем-то вроде этого:
paste -d '\n' *.txt > new.txt
Результаты становятся непредсказуемыми
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
CT Analyser, Version: 1.9.3.2
Date and time,25.07.2014 09:55
Date and time,25.07.2014 09:55
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:56
Date and time,25.07.2014 09:55
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Operator identity,svy557
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computer name,UT156805
Computation time,00:08:13
Computation time,00:08:13
Computation time,00:08:24
Computation time,00:08:24
Computation time,00:08:24
Computation time,00:08:13
Dataset,583_right__rec_tra_voi
Dataset,583_right__rec_tra_voi
Dataset,591_right__rec_tra_voi
Dataset,591_right__rec_tra_voi
Dataset,591_right__rec_tra_voi
Dataset,583_right__rec_tra_voi
Location,D:\Pam Mandible Copy\583 Right\Region1\
Location,D:\Pam Mandible Copy\583 Right\Region1\
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\591 Right\Region1\
Location,D:\Pam Mandible Copy\583 Right\Region1\
Еще раз спасибо всем за помощь
решение1
Я подозреваю, что в этих строках есть конечные пробелы, и это толкает их в перенос. Вы пробовали сбросить начало файла в восьмеричном/шестнадцатеричном виде, чтобы проверить, так ли это?
Затем вы можете использовать простую sed
команду, чтобы исправить все файлы в циклическом скрипте оболочки, прежде чем начать.
решение2
Вероятно, дело в том, что исходные файлы содержат переносы строк Windows. Команда, paste
похоже, работает неправильно с переносами строк Windows в сочетании с разделителем. Вы можете проверить это, используя od
в файлах. Если он содержит \r\n
, вам сначала нужно это исправить. Исправление этого можно сделать с помощью dos2unix
.
Проверка моей системы:
[stc@se] $ echo -e "foo\r" > a ; echo -e "bar\r" > b
[stc@se] $ od -c a
0000000 f o o \r \n
0000005
[stc@se] $ paste a b
foo bar
[stc@se] $ paste -d"," a b
,bar
Исправляем это с помощью dos2unix
:
[stc@se] $ dos2unix a b
dos2unix: converting file a to Unix format...
dos2unix: converting file b to Unix format...
[stc@se] $ paste -d"," a b
foo,bar
dos2unix
не установлен по умолчанию во всех системах Linux, поэтому вам все равно может потребоваться его установка.