매개변수 연산을 기반으로 파일을 생성하는 방법

매개변수 연산을 기반으로 파일을 생성하는 방법

$4매개변수를 가져와 매개변수별로 균등하게 나누고 $2(균등하게 나눌 수 없는 경우 마지막 부분을 채우기 위해 공백을 추가합니다) 각 부분을 방금 만든 임의 파일의 끝에 배치해야 합니다.

dir=$3

mkdir -p -- "$dir" || exit 1

fname=$(shuf -n 1 "$1")

tr -dc 'A-Za-z0-9' </dev/urandom | head -c 255 >"$dir/$fname"

다음과 같습니다.

script.sh <word_src> <size_of_parts> <out_dir> <text_to_process>.

$4로 나눈 부분 수 에 따라 생성되는 파일 개수가 달라집니다 $2. 기본적으로 <test_to_process>에 포함될 파일을 유사하게 숨겨야 합니다 <out_dir>. 파일을 알파벳순으로 정렬할 수 있도록 동시에 처리하는 것이 더 쉬울까요 <out_dir>?

예: script.sh <word_src> 3 <out_dir> this will be divided"This will Divided"는 "thi" "sw" "ill" "be" "di" "vid" "ed" 3개의 문자로 균등하게 분할됩니다. 이 예에서는 끝에 공백을 추가해야 합니다 ed. 그런 다음 각 개별 부분을 무작위 파일 끝에 보내겠습니다.

답변1

이 루틴은 문자열 분할 작업을 해결해야 합니다. 귀하의 필요에 맞게 조정하십시오:

$ cat go.sh
#!/usr/bin/env bash
str="This will be divided"
ptr=0
interval=3
while [[ $ptr -le ${#str} ]]; do
   printf "'%-3s'\n" "${str:$((ptr)):$((interval))}"
   ptr=$((ptr+interval))
done

사용 중:

$ ./go.sh
'Thi'
's w'
'ill'
' be'
' di'
'vid'
'ed '

이는 bash내장된 매개변수 확장 도구를 사용하여 하위 문자열을 추출합니다. 변수가 주어지면 foo:

  • $foo내용으로 대체foo
  • ${#foo}의 항목 수로 대체됩니다 foo. 배열의 경우 이는 할당된 값의 수이고, 배열이 아닌 경우에는 $foo( foo=10; echo ${#foo}yield )로 2표시되는 문자열의 길이 입니다.
  • ${foo:4:4}foo다섯 번째 문자(0은 첫 번째 인덱스)부터 시작하여 총 4개의 문자를 content 로 바꿉니다 .

마지막이 여기서 핵심입니다. 문자열, 지금까지 인쇄한 문자 수를 나타내는 포인터 및 정의된 간격을 사용합니다.

이것을 형식화된 문자열과 결합합니다. %-3s왼쪽 정렬되고 공백이 채워진 문자열이 출력됩니다. 따라서 하나 또는 두 개의 문자만 제공하면 오른쪽에 공백 패딩이 추가됩니다.

파일에 쓰려면 간단히 변경하면 됩니다.

   printf "'%-3s'\n" "${str:$((ptr)):$((interval))}"

도착하다

   fname="$dir/$(shuf -n 1 "$1")"
   tr -dc 'A-Za-z0-9' </dev/urandom | head -c 255 > "$fname"
   printf "'%-3s'\n" "${str:$((ptr)):$((interval))}" >> "$fname"

관련 정보