2015-05-14 5 views
1

Извините, я новичок в unix, но просто интересно, есть ли в любом случае я могу сделать следующий код в цикле. Например, имя файла будет меняться каждый раз, когда от 1 до 50shell scripting do loop

Мой сценарий

cut -d ' ' -f5- cd1_abcd_w.txt > cd1_rightformat.txt ; 
sed 's! \([^ ]\+\)\(\|$\)!\1 !g' cd1_rightformat.txt ; 
sed -i 's/ //g' cd1_rightformat.txt; 
cut -d ' ' -f1-4 cd1_abcd_w.txt > cd1_extrainfo.txt ; 

Я хотел бы сделать это в петлю, где cd1_abcd_w.txt бы тогда cd2_abcd_w.txt и выход будет cd2_rightformat.txt и т. д. ... вплоть до 50. Итак, cd $ i.

Большое спасибо

ответ

2

В bash, вы можете использовать расширение распорка:

for num in {1..10}; do 
    echo ${num} 
done 

похож на BASIC for i = 1 to 10 цикла, это включено в обоих концов, что цикл будет выводить номера 1 по 10 .

Затем вы просто замените команду echo тем, что вам нужно сделать, например:

cut -d ' ' -f5- cd${num}_abcd_w.txt >cd${num}_rightformat.txt 
# and so on 

Если вам нужно число меньше десяти, чтобы иметь ведущий нуль, изменить выражение в цикле for быть {01..50} вместо этого. Это, похоже, не так, но это очень удобно знать.


Кроме того, в не-необходимой, но, удобный к ноу категории, вы можете также указать приращение, если вы не хотите использовать по умолчанию одного:

pax> for num in {1..50..9}; do echo ${num}; done 
1 
10 
19 
28 
37 
46 

(эквивалентно BASIC for i = 1 to 50 step 9).

+0

Great..that работал отлично Спасибо так много! – dcp1234

0

Это должно работать:

for((i=1;i<=50;i++));do 
cut -d ' ' -f5- cd${i}_abcd_w.txt > cd${i}_rightformat.txt ; 
sed 's! \([^ ]\+\)\(\|$\)!\1 !g' cd${i}_rightformat.txt ; 
sed -i 's/ //g' cd${i}_rightformat.txt; 
cut -d ' ' -f1-4 cd${i}_abcd_w.txt > cd${i}_extrainfo.txt ; 
done 
+0

Отлично! Спасибо! – dcp1234

-1

Это будет работать в Баш:

for in in $(seq 50) 
do 
cut -d ' ' -f5- cd$i_abcd_w.txt > cd$1_rightformat.txt; 
sed 's! \([^ ]\+\)\(\|$\)!\1 !g' cd$i_rightformat.txt; 
sed -i 's/ //g' cd$i_rightformat.txt; 
cut -d ' ' -f1-4 cd$i_abcd_w.txt > cd$i_extrainfo.txt; 
done