Как форматировать столбцы с помощью awk?

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, если вам также нужно обновить метку времени доступа ).

-3
11.04.2020, 13:32
2 ответа

Попробуйте эту адаптацию вашей попытки:

$ 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
3
19.03.2021, 02:30
$ 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
2
19.03.2021, 02:30

Теги

Похожие вопросы