1

KSH HP-SOL-Lin 无法使用 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 命令是什么问题?

4

1 回答 1

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.
于 2012-09-19T18:17:38.533 回答