У меня есть команда вставки в моем скрипте. Но это не дает желаемого результата. мой файл данныхКак использовать команду вставки рекурсивно в сценарии оболочки
file.txt
1
3
5
4
мой сценарий оболочки
f1=file.txt
for j in 1..12
do
awk '{printf ("%.1f\n", $1+'$j');}' $f1 > $j_$f1
paste $j_$f1 > ofile.txt # ofile.txt is a new empty file
done
Этот сценарий дает результат, как
ofile.txt
2
4
6
5
3
5
7
6
.
.
Мой желаемый результат, как
ofile.txt
2 3 4 5 6 ... 13
4 5 6 7 8 ... 15
6 7 8 9 10 .. 17
5 6 7 8 9 ... 16
Я также хочу сделать для следующий сценарий
bonus_company1=10
bonus_company2=25
bonus_company3=50
declare var=("company1" "company2" "company3")
for k in var{[@]}
do for j in jan..dec
do if [ $j == "jan" ] || [ $j == "may" ] || [ $j == "sep" ]; then
awk '{printf ("%.1f\n", $1+ '$bonus_$k');}' $f1 > $k_$j_$f1
elif [ $j -ne "jan" ] && [ $j -ne "may" ] && [ $j -ne "sep" ]; then
awk '{printf ("%.1f\n", $1+5);}' $f1 > $k_$j_$f1
fi
paste $k_$j_$f1 > $k.txt # $k.txt is a new empty file
done
done
поэтому я получу 3 разных файла для трех компаний. например
company1.txt
11 6 6 6 11 .....
13 8 8 8 11 .....
15 10 10 10 15 .....
14 9 9 9 14 .....
Это не совсем понятно, что вы имеете в виду, вы должны изменить свой вопрос, чтобы объяснить, что именно вы пытаетесь сделать. –
Он отлично выглядит! Тогда можно сделать, когда мой j - это разные символы вместо чисел, например. для j в {разных названиях компаний}, и мои вычисления различны соответственно, например. если [conditon true]; затем awk '{printf "% s \ n", $ 1}. Я соответствующим образом отредактировал вопрос. – Roselover
Я отредактировал свой ответ, чтобы показать, как вы могли бы ответить на вторую часть своего вопроса. Я предполагаю, что вы используете оболочку, которая поддерживает ассоциативные массивы (например, bash), отчасти потому, что вы использовали '==' для сравнения в вашей попытке. –