2017-09-18 28 views
1

私は以下の例のようなスクリプトを持っています。私は文字オフセットを持っており、私はオフセットと計算した文字を印刷する必要があります。私はkshを使ってその手紙を読む方法がわかりません。変数名を計算中にawk内の変数を出力

私の期待される答えは、LETTER_OFFSET(1)= a、LETTER_OFFSET(2)= v、LETTER_OFFSET(3)= cなどです。

#!/bin/ksh 
#   1 2 3 4 5 6 7 8 9 10 11 12 
LETTERS=" a v c d g r g s s a g f" 
LETTER_OFFSET="3"; 
Letter=$(echo $LETTERS | awk '{print $((1 * $$LETTER_OFFSET)) }') 
+1

ここにあなたのポストにtxtspkの任意の並べ替えを追加することはご遠慮ください。加えて、「助けてください」などの毛羽立ちを追加する必要はありません。読者はあなたが何か助けを求めていることを知っているので、その種の資料は嘆願書の形で読むことができます。できるだけ簡潔にしておいてください。 – halfer

+1

awkはシェルではないので、awkスクリプト内でシェル変数と構文を使用することはできません。 Cプログラムと同じようにawkプログラムを扱います。シェルから呼び出すことはできますが、シェルではありません。 –

答えて

5

あなたは合格でしょう、あなたのawk -vフラグを使用して、awkの変数として使用するようにawkスクリプトへのオフセット:

LETTER=$(echo $LETTERS | awk -v offset=$LETTER_OFFSET '{print $offset}') 
2

あなたはすべての反復でawkを起動する必要はありません。あなたの手紙を使用して、配列を移入し、それはindexを使用して値のアクセスすることができます

#!/bin/ksh 
#   1 2 3 4 5 6 7 8 9 10 11 12 
letters=" a v c d g r g s s a g f" 

# populate an array 
arr=($letters) 

offset=1 
while [ "$offset" -le 12 ]; do 
    echo "${arr[$offset-1]}" 
    let offset++ 
done 

出力:

a 
v 
c 
d 
g 
r 
g 
s 
s 
a 
g 
f 
+1

これはちょうど良いアイデアです...ありがとう! – user1342645

関連する問題