2017-09-18 61 views
1

我有一個如下例所示的腳本。我有一個字母偏移量,我需要打印我用偏移量計算的字母。我不確定如何使用ksh讀取那封信。我的預期答案是LETTER_OFFSET(1)= a,LETTER_OFFSET(2)= v,LETTER_OFFSET(3)= c等等。我已經在循環內計算了偏移量。在計算變量名時在awk中打​​印變量

#!/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不是shell,所以不要假設你可以在awk腳本中使用shell變量和語法。像處理C程序一樣處理一個awk程序 - 你可以從shell調用但不是shell的東西。 –

回答

5

你會通過你的偏移量,你的awk腳本使用AWK -v標誌一個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