echo "$(( ++my_num ))" | tee "$my_file"
Tee по умолчанию записывает именованный файл (в )и в стандартный вывод.
После typeset -i my_num=$(cat "$my_file")
(, которое может быть typeset -i my_num=$(<"$my_file")
в bash
), вы можете использовать
my_num=$(( my_num == 0 ? 1 : my_num ))
, чтобы установить его в 1, если его значение равно нулю. Целочисленные переменные в bash
оцениваются как нулевые, если они пусты.
Я собирался предложить my_num=${my_num:-1}
, но так как my_num
является целочисленной переменной, она расширится до нуля, если она пуста, а не до пустой строки, что означает, что параметр ${variable:-value}
замена не сработает (в противном случае это расширится до value
, если переменная не установлена или пуста ).
Вероятно, я бы написал функцию как
get_next_int () {
local -i val
read val <"$HOME/next_int.json"
val=$(( val == 0 ? 1 : val ))
printf "%d\n" "$(( val + 1 ))" | tee "$HOME/next_int.json"
}
при условии, что "$HOME/next_int.json"
всегда содержит одно целое число. Я пропустил touch
, потому что метка времени модификации файлов будет обновлена с помощьюtee
(keep touch
, если вам также нужно обновить метку времени доступа ).
Попробуйте эту адаптацию вашей попытки:
$ awk -F ";" '
{TOT += $2 * $3
printf "area of %s: %*d\n", $1, 14-length($1), $2 * $3
}
END {printf "TOTAL AREA: %*d\n", 12, TOT
}
' file
area of rectangle1: 2
area of rectangle2: 10
area of rect4: 100
TOTAL AREA: 112
$ awk -F ';' -v OFS='\t' '
{ tot+=prod=$2*$3; print "area of " $1 ":", prod }
END { print "TOTAL AREA:", tot+0 }
' file | column -s$'\t' -t
area of rectangle1: 2
area of rectangle2: 10
area of rect4: 100
TOTAL AREA: 112