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 語を超えているため、最大 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

タイプセット peice にはまだ問題があるようです。仮定

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一度に 2 つの単語を抽出するために使用するループを次に示します。

# 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 に答える