bash将文本拆分为有限的字符桶(数组成员)

bash将文本拆分为有限的字符桶(数组成员),bash,sed,split,awk,Bash,Sed,Split,Awk,我有这样的文本 我们可以说这个文本是一组规则,在行尾用“或”分隔 我需要将一组行(规则)放入bucket(bash数组成员)中,但每个数组成员的字符限制为1024 所以每个数组成员都应该包含一组规则,但每个数组成员的字符数不能超过1024 假设规则文本类似于 a或b或c或d或e或f或g或h 输出应该是 数组成员1=a或b 数组成员2=c或d或e 数组成员3=f或g 数组成员4=h 有人能帮我吗 在solaris 10服务器上工作这并不是一件小事,需要更多的说明,但基本上,您首先按或/和(以及一

我有这样的文本

我们可以说这个文本是一组规则,在行尾用“或”分隔

我需要将一组行(规则)放入bucket(bash数组成员)中,但每个数组成员的字符限制为1024

所以每个数组成员都应该包含一组规则,但每个数组成员的字符数不能超过1024

假设规则文本类似于 a或b或c或d或e或f或g或h

输出应该是 数组成员1=a或b

数组成员2=c或d或e

数组成员3=f或g

数组成员4=h

有人能帮我吗


在solaris 10服务器上工作

这并不是一件小事,需要更多的说明,但基本上,您首先按或/和(以及一些其他模式,取决于您的需要)拆分它们,然后递归地再次拆分大于1024的块

另外,这似乎是其中一种情况,当使用成熟的脚本语言(如Perl、Python、PHP或任何其他语言)时,将能够更方便地实现结果

PHP中的一个基本问题(不确定是否完全正确,有一段时间没有做过PHP),可能是这样的:

function splitByOr($input)
{
  $tokens = explode(" OR ",$input);
  foreach ($t in $tokens)
    if (strlen($t) > 1024)
         $t=splitByOr($t);
  return $tokens;
}

samplerule文件中的任何单个规则的长度都不超过148个字符-远远小于1024个字符的限制。你不会说如果规则超过了这个限制,该怎么办

这是一个非常简单的Bash脚本,它将文本“\n”上的示例拆分为一个名为“rules”的数组。它跳过超过1024个字符的行并打印错误消息:

#!/bin/bash
while read -r line
do
    (( count++ ))
    if (( ${#line} > 1024 ))
    then
        echo "Line length limit of 1024 characters exceeded: Length: ${#line} Line no.: $count"
        echo "$line"
        continue
    fi
    rules+=($line)
done < <(echo -e "$(<samplerule)")
#/bin/bash
而read-r行
做
((count++)
如果(${line}>1024))
然后
echo“超出1024个字符的行长度限制:长度:${Line}行号:$count”
回音“$line”
持续
fi
规则+=($line)

完成<这不是我真正想要的:(
#!/bin/bash
while read -r line
do
    rules+=(${line:0:1024})
done < <(echo -e "$(<samplerule)")
done < <(echo -e "$(<samplerule)")
done < <(awk 'BEGIN {RS="OR"} {print $0,"OR"}' samplerule)
if [[ "${rules[${#rules[@]}-1]}" == "OR" ]]
then
    unset "rules[${#rules[@]}-1]"
fi