붙여넣기를 사용하여 여러 텍스트 파일을 나란히 병합하는 중 문제

붙여넣기를 사용하여 여러 텍스트 파일을 나란히 병합하는 중 문제

수백 개의 .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

나는 이 줄에 후행 공백이 있다고 의심하고, 이로 인해 줄바꿈이 시작됩니다. 이것이 사실인지 확인하기 위해 8진수/16진수로 파일 시작 부분을 덤프해 보셨습니까?

그런 다음 시작하기 전에 간단한 sed명령을 사용하여 반복 쉘 스크립트의 모든 파일을 수정할 수 있습니다.

답변2

아마도 여기서의 경우는 원본 파일에 Windows 줄 바꿈이 포함되어 있다는 것입니다. 구분 기호와 함께 Windows 줄바꿈을 사용하면 명령이 paste잘못된 것 같습니다. 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 시스템에는 기본적으로 설치되어 있지 않으므로 설치해야 할 수도 있습니다.

관련 정보