In một chuỗi số lần [đóng]


0

Tôi có một biến numvarchứa một số.

            một cái gì đó đọc số được lưu trữ trong numvar và sau đó tạo ra cùng một số sTrapValue [với một số ở đây tăng dần với mỗi bản in từ 0 đến numvar]            

ĐẦU VÀO

tiếng vang $ numvar
5

Tôi đang tạo $numvarthời gian in sTrapValue[x], trong đó xsố lượng tăng dần.

ĐẦU RA
vào một biến khác bl

tiếng vang $ bl
sTrapValue [0], sTrapValue [1], sTrapValue [2], sTrapValue [3], sTrapValue [4], sTrapValue [5].

Tất cả chúng đều có dấu phẩy chỉ sTrapValue cuối cùng [] kết thúc bằng một. (Fullstop)

Bất kỳ lệnh nào để làm điều này Grep / sed / awk?


Vui lòng chỉnh sửa câu hỏi của bạn và làm rõ. "Mã" của bạn được cho là gì? Tại sao nó nằm trong một khối mã nếu nó không phải là mã? Điều đó chỉ làm cho nó khó đọc hơn. Cho chúng tôi xem mã thực tế của bạn và đầu ra chính xác mà bạn muốn xem.
terdon

Câu trả lời:


1

Bạn có thể sử dụng điều này:

$ numvar=5

$ bl="$(seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done) \
bl="${bl//$'\n'/,}" && bl="$(sed 's/$/./' <<<"$bl")" 

Nó có ba phần:

  • seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; donesẽ tạo ra một đầu ra tách biệt dòng mới hiển thị các mục sTrapValue[0-5].

  • "${bl//$'\n'/,}" sẽ chuyển đổi tất cả các dòng mới sang dấu phẩy.

  • $(sed 's/$/./' <<<"$bl")sẽ thêm một .ở cuối

Bạn cũng có thể sử dụng trsedđịnh dạng đầu ra:

 bl="$(seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done | tr '\n' ',' | sed 's/,$/./')"

Kiểm tra :

$ echo "$bl"
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].

Không không. Có một cái nhìn vào đầu ra của tôi. Đó là cách tôi muốn in / lưu trữ bl. bất cứ số nào numvarchứa số đó sTrapValuesẽ được in bao nhiêu lần .
SamFlynn

@SamFlynn Kiểm tra câu trả lời đã được chỉnh sửa của tôi .....
heemayl

1
sTrapValue[0]='a'; 
sTrapValue[1]='b'; 
sTrapValue[2]='c'; 
numvar=2; 
COUNTER=0; 
BL=""; 
while [ ! $COUNTER -gt ${numvar} ]; do 
  BL=${BL}${sTrapValue[$COUNTER]},; 
  let COUNTER=COUNTER+1; 
done; 
BL=$(echo ${BL} | sed 's/,$/./'); 
echo $BL;

=> a, b, c.

BIÊN TẬP :

Trả lời câu hỏi đã chỉnh sửa:

numvar=2; 
COUNTER=0; 
BL=""; 
while [ ! $COUNTER -gt ${numvar} ]; do 
  BL=${BL}sTrapValue[${COUNTER}],; 
  let COUNTER=COUNTER+1; 
done; 
BL=$(echo ${BL} | sed 's/,$/./'); 
echo $BL;

=> sTrapValue [0], sTrapValue [1], sTrapValue [2].


Không không. Có một cái nhìn vào đầu ra của tôi. Đó là cách tôi muốn in / lưu trữ bl. bất cứ số nào numvarchứa số đó sTrapValuesẽ được in bao nhiêu lần .
SamFlynn

numvar = 5 nhưng mảng của bạn đi từ 0-5, đó là 6 giá trị trong đầu ra mà bạn muốn.
aldwinaldwin

vâng, mảng đi từ 0-6. Vì vậy, sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5]. đây là những gì đầu ra sẽ được.
SamFlynn

1

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn đang tìm kiếm một cái gì đó như:

$ printf 'sTrapValue[%s],' $(seq 0 $numvar) | sed 's/,$/.\n/'
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.