使用粘贴并排合并多个文本文件时出现问题

使用粘贴并排合并多个文本文件时出现问题

我必须并排合并数百个 .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在开始之前使用一个简单的命令来修复循环 shell 脚本中的所有文件。

答案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 系统上都安装了它,因此您可能仍需要安装它。

相关内容