KSH:根据计数将String拆分为较小的子串

时间:2012-09-19 17:33:45

标签: string shell split ksh

KSH HP-SOL林 不能使用xAWK

我有几个很长的字符串,我想将它们分解成更小的子字符串。

我有什么

String = "word1 word2 word3 word4 .....wordx"

我想要什么

String1="word1 word2"
String2="word3 word4"
String3="word4 word5"
Stringx="wordx wordx+1"
etc.....

如果我的字符串长于x字,如何将其分解为不超过x的较小字符串?我不知道每个字符串会有多长。我们可以测试它,但它不会一致。

StrLen=`echo $string |wc -w`

有些字符串长于2000个字,所以我不能使用shell数组,因为最多有1024个字段。

想法?

以下是我根据以下评论提出的建议

FIELDS=`echo $String | wc -w`
((n=$FIELDS/2+1))
i=1

while [[ $i -le $n ]]; do
typeset STRING$i=`echo $String | cut -d" " -f$CUTSTART-$CUTEND`
do stuff

i=`expr $i+1`
CUTSTART=`expr $CUTSTART+1`
CUTEND=`expr $CUTEND+1`
done

似乎仍然存在排版问题。 假设

i=1
CUTSTART=1
CUTEND=2
String=one two three

myserver> typeset STRING=`echo $String | cut -d" " -f$CUTSTART-$CUTEND`
myserver> echo $STRING
myserver> one two
myserver>
myserver> typeset STRING$i=`echo $String | cut -d" " -f$CUTSTART-$CUTEND`
myserver> echo $STRING1
myserver> one

$ i搞砸了我的echo | cut命令是什么问题?

1 个答案:

答案 0 :(得分:1)

这是一个使用read一次提取两个单词的循环:

# Take advantage of the fact that ksh doesn't execute
# read in a subshell.
i=1
String="one two three four five six seven eight"
while echo $String | read w1 w2 w3; do
    typeset "String$i=$w1 $w2"
    if [ -z $w3 ]; then
        break;
    fi
    String=$w3
    let i=i+1
done
echo $String1
echo $String2
echo $String3
# etc.