Problemas al fusionar muchos archivos de texto uno al lado del otro usando pegar

Problemas al fusionar muchos archivos de texto uno al lado del otro usando pegar

Tengo que fusionar cientos de archivos .txt uno al lado del otro. He estado intentando utilizar algunas de las preguntas ya respondidas en los foros, pero mientras los archivos se fusionan, el segundo y tercer archivo (y así sucesivamente) se desplazan una línea hacia abajo cada vez. Me gustaría que permanecieran alineados, todos los archivos tienen el mismo número de filas (si no caracteres en cada fila). Mis archivos están separados por comas y mi objetivo final es lograr que todos sobresalgan en el procesamiento de datos.

mis archivos son

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\

He probado algo como lo siguiente:

paste 591.txt 593.txt | column -s $'\t' -t

se fusiona así (el segundo archivo una línea debajo, en lugar de líneas una al lado de la otra):

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\

Esto se ha estado volviendo loco durante unos días y cualquier ayuda sería muy apreciada. Soy bastante nuevo en UNIX, así que estoy tratando de aprender lo suficiente para hacer esto y luego otros pocos proyectos que requieren habilidades similares. Los archivos reales tienen alrededor de 50 filas y todas se ven así, si intento hacer más de un archivo con algo como esto:

paste -d '\n' *.txt > new.txt

Los resultados se vuelven impredecibles.

 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\

Gracias de nuevo por toda la ayuda

Respuesta1

Sospecho que hay espacios finales en estas líneas, y eso lo está empujando a un ajuste envolvente. ¿Has intentado volcar el inicio de un archivo en octal/hexadecimal para ver si ese es el caso?

Luego, podría usar un sedcomando simple para arreglar todos los archivos en un script de shell en bucle antes de comenzar.

Respuesta2

Probablemente el caso aquí es que los archivos originales contienen saltos de línea de Windows. El comando pasteparece funcionar mal con los saltos de línea de Windows en combinación con el delimitador. Puede verificar esto usando odlos archivos. Si contiene \r\n, primero debes solucionarlo. Se puede arreglar esto con dos2unix.

Una revisión de mi sistema:

[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

Arreglando esto con 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

dos2unixno está instalado de forma predeterminada en todos los sistemas Linux, por lo que es posible que aún necesites instalarlo.

información relacionada