파일을 하나로 병합 [중복]

파일을 하나로 병합 [중복]

다음 파일 이름을 가진 폴더가 있는 경우:

cluster_sizes_0.txt
cluster_sizes_1.txt
cluster_size_2.txt

등.

각 파일에는 값 열이 포함되어 있습니다.

Linux에 모든 파일을 Cluster_all.txt로 병합하는 명령이 있습니까?

이 새 파일의 첫 번째 열은 에 해당하고 두 번째 열은 등에 cluster_sizes_0.txt해당합니다 .cluster_sizes_1.txt

클러스터링된 txt 파일은 최대 200개까지 있을 수 있지만 각 폴더는 서로 다릅니다. 이 파일들을 하나씩 복사하지 않고 합칠 수 있는 방법을 찾고 있습니다.

또한 파일에 순서대로 붙여넣어졌는지 확인해야 합니다. 10 미만인 경우 한 자리 숫자만 포함하므로 번호 매기기 시스템에 몇 가지 문제가 발생할 수 있습니다.

예를 들어:

paste cluster_size.* > cluster_all.txt번호 매기기 문제로 인해 순서대로 붙여넣지 않았습니다. 모든 번호를 수동으로 변경하지 않고 번호 매기기를 수정하려면 어떻게 해야 합니까?

답변1

이 명령은 paste열을 함께 병합합니다. 예를 들어, 다음과 같은 3개의 파일이 있는 경우 붙여넣으면 좋은 결과가 생성됩니다.

$ cat file_1.txt
1a
1b
1c

$ cat file_2.txt
2a
2b
2c

$ cat file_3.txt
3a
3b
3c

$ paste -d, file_1.txt file_2.txt file_3.txt
1a,2a,3a
1b,2b,3b
1c,2c,3c

이제 문제는 실제로 파일을 순서대로 가져오는 방법입니다. 우리는 속이고 ls다른 사람들이 우리를 위해 일하도록 만들 수 있습니다

$ ls     
file_1.txt   file_13.txt  file_17.txt  file_20.txt  file_6.txt
file_10.txt  file_14.txt  file_18.txt  file_3.txt   file_7.txt
file_11.txt  file_15.txt  file_19.txt  file_4.txt   file_8.txt
file_12.txt  file_16.txt  file_2.txt   file_5.txt   file_9.txt

$ ls -v
file_1.txt  file_5.txt  file_9.txt   file_13.txt  file_17.txt
file_2.txt  file_6.txt  file_10.txt  file_14.txt  file_18.txt
file_3.txt  file_7.txt  file_11.txt  file_15.txt  file_19.txt
file_4.txt  file_8.txt  file_12.txt  file_16.txt  file_20.txt

$ paste -d, $(ls -v file_*.txt)
1a,2a,3a,4a,5a,6a,7a,8a,9a,10a,11a,12a,13a,14a,15a,16a,17a,18a,19a,20a
1b,2b,3b,4b,5b,6b,7b,8b,9b,10b,11b,12b,13b,14b,15b,16b,17b,18b,19b,20b
1c,2c,3c,4c,5c,6c,7c,8c,9c,10c,11c,12c,13c,14c,15c,16c,17c,18c,19c,20c

이제 구문 분석은 ls일반적으로 나쁜 것입니다. 예상치 못한 파일 이름이나 이상한 문자(예: 공백, 와일드카드)가 있는 경우 스크립트가 중단될 수 있습니다. 그러나 파일 이름이 "ok"라고 확신한다면 이것이 작동할 것입니다.

관련 정보