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命令是什么问题?
答案 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.