디렉토리의 문자 수로 텍스트 파일을 분할하는 방법

디렉토리의 문자 수로 텍스트 파일을 분할하는 방법

디렉터리에 있는 여러 텍스트 파일을 주어진 문자 수만큼 더 작은 텍스트 파일로 나누고 싶습니다. 예를 들어, 디렉토리의 모든 파일을 각각 100자의 더 작은 텍스트 파일로 나누기를 원합니다. 내가 이해한 바에 따르면 Linux의 분할 명령은 문자 수가 아닌 줄 수로만 작동하므로 이것이 작동하는지 확실하지 않습니다.

편집: 텍스트 파일을 단어 수로 분할하는 방법도 알고 싶습니다.

답변1

파일이 ASCII 텍스트인 경우 사용할 수 있습니다 split -b100. 이는 100바이트, 항상 100개의 ASCII 문자를 의미합니다.

답변2

정확히 요청하신 내용은 아니지만 조정될 수 있습니다.

.txt그러면 현재 디렉터리에서 접미사가 붙은 모든 파일이 처리됩니다. 각 파일에 대해(예 Cairo.txt: ):

  1. 모든 공백을 개행 문자로 대체 하여 tr한 줄에 한 단어로 구성된 간단한 목록이 생성됩니다.
  2. fmt지정된 길이까지 정수 수의 단어를 한 줄에 묶는 데 사용됩니다 .
  3. split이 줄을 일련의 Cairo.seq.0000파일 이름 으로 만드는 데 사용됩니다 .

테스트 가능성을 위해 너비 60과 줄 30을 사용했으며 입력 내용은 다음과 같이 생성된 일반 텍스트 매뉴얼 페이지 3개였습니다.

for cmd in tr fmt split; do man $cmd | col -b > $cmd.txt; done

스크립트는 다음과 같습니다.

#! /bin/bash

    for fn in ./*.txt; do
        Base="${fn%.txt}"
        tr -s '[:space:]' '\n' < "${fn}" |
            fmt -60 |
            split -a 4 -d -l 30 - "./${Base}.seq."
    done

fmt 명령에서 선 너비는 "60"입니다. 따라서 이 숫자를 100으로 설정하는 것이 좋습니다.

분할 명령에서 각 출력 파일의 줄 수는 "30"입니다. 파일당 한 줄을 원하는 것 같습니다. 그러나 이러한 작은 파일이 많이 생성됩니다. 100바이트 파일은 여전히 ​​4096바이트 블록을 차지합니다.

단어 수는 변하지 않았지만 공백이 줄어들고 줄도 줄어든 것을 볼 수 있습니다.

paul $  wc *
   29   214  1561 fmt.seq.0000
   61   214  1832 fmt.txt
   30   260  1665 split.seq.0000
   15   101   780 split.seq.0001
   94   361  2892 split.txt
   30   263  1724 tr.seq.0000
   18   126   929 tr.seq.0001
  124   389  3282 tr.txt
  410  1955 14821 total
paul $ 

관련 정보