我必须并排合并数百个 .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 系统上都安装了它,因此您可能仍需要安装它。