我必须获取$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
by的划分部分的数量$2
。基本上我需要同样隐藏<test_to_process>
将在<out_dir>
.同时处理文件是否会更容易,以便它们可以按字母顺序排序<out_dir>
?
示例:
script.sh <word_src> 3 <out_dir> this will be divided
“这将被划分”将被均匀地分成 3 个字符“thi”“s w”“ill”“be”“di”“vid”“ed”。在此示例中,我需要在 的末尾添加一个空格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}
yiels2
) 表示的字符串的长度。${foo:4:4}
替换为 的内容foo
,从第五个字符开始(零是第一个索引),共四个字符。
最后一个是这里的关键:我们使用我们的字符串、一个指示到目前为止我们已经打印了多少个字符的指针以及一个定义的间隔。
我们将其与格式化字符串结合起来: %-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"