모든 파일을 하나의 파일로 결합하시겠습니까?

모든 파일을 하나의 파일로 결합하시겠습니까?

모든 텍스트 파일을 하나의 파일로 병합하려고 합니다. 모든 텍스트 파일에는 하나의 열과 동일한 수의 행이 있습니다. 내 데이터 파일 이름은 data_1.txt, data_2.txt, data_3.txt, . . data_n.txt. 여기서 n은 병합할 텍스트 파일의 수입니다. 1부터 n까지 순서대로 병합하고 싶습니다. 다음 코드를 시도했지만 원하는 방식으로 작동하지 않습니다. 열 순서를 유지하지 않습니다.

내 샘플 데이터는 다음과 같습니다

data_1.txt

0.020085
0.0017361
0.77963
0.98659
0.33102
0.099835
0
0
0.073004
0.29978

data_2.txt

0.021407
0.0017191
0.82385
1.0449
0.34593
0.10535
0
0
0.078362
0.31509

data_3.txt

0.022706
0.0016876
0.85447
1.0922
0.35556
0.11063
0
0
0.083983
0.32536

원하는 출력

조합.txt

0.020085    0.021407    0.022706
0.0017361   0.0017191   0.0016876
0.77963 0.82385 0.85447
0.98659 1.0449  1.0922
0.33102 0.34593 0.35556
0.099835    0.10535 0.11063
0   0   0
0   0   0
0.073004    0.078362    0.083983
0.29978 0.31509 0.32536

내 문제를 해결하도록 도와주실 수 있나요?

#!/bin/bash
paste data_*.txt > combined.txt

답변1

를 사용하면 zshglob 한정자를 사용하여 파일 이름이 생성되는 순서에 영향을 줄 수 있습니다.

paste file_*.txt(n)

열 예정이다숫자넣어서 정렬file_10.txt 뒤쪽에 file_9.txt

파일이 CR 문자(Microsoft 세계에서 가져온 것처럼)로 끝나는 경우 해당 문자는 터미널로 출력할 때 커서를 첫 번째 열로 이동합니다.

따라서 포함된 파일의 경우 A\rB\rC\rn(MS-DOS 형식의 파일이 3개 있는 경우 발생 paste) 위의 내용을 파이핑하여 CR 문자를 제거할 수 있습니다 cat that-file.Ctr -d '\r'

답변2

당신은 그것을 사용할 수 있습니다버팀대 확장paste정렬:

$ paste data_{1..3}.txt
0.020085    0.021407    0.022706
0.0017361   0.0017191   0.0016876

중괄호는 여러 단어로 확장되며 각 단어에는 중괄호 왼쪽과 오른쪽 부분이 있습니다. 구문 은 다음 n..m과 같습니다서열 표현:

시퀀스 표현식은 {x..y[..incr]} 형식을 취합니다. 여기서 x와 y는 정수 또는 단일 문자이고 incr(선택적 증분)은 정수입니다. 정수가 제공되면 표현식은 x와 y 사이의 모든 숫자(포함)로 확장됩니다.

위의 명령줄은 다음과 같이 확장됩니다.

paste data_1.txt data_2.txt data_3.txt

여기에는 올바른 순서의 파일이 포함됩니다. 3이를 원하는 수의 파일로 변경하여 적절한 파일 이름을 모두 얻을 수 있습니다.

paste명령은 파일 매개변수를 인수로 제공된 순서대로 열 단위로 연결하므로 인수의 순서가 중요합니다. filenames 를 사용하면 *파일 이름이 알파벳순으로 확장됩니다. 이는 10개 이상의 파일이 있는 경우 잘못된 것이므로 열의 순서가 잘못됩니다. 1~9개 파일의 경우 어느 쪽이든 괜찮습니다.

답변3

paste -d " " 1.txt 2.txt > 4.txt

그것을 사용하는 또 다른 방법이 있습니다 awk:

$ awk '{printf "%s",$1; getline < "1.txt" ; printf " %s\n",$1}' 2.txt

관련 정보