Раскрашивание папок в ZSH в зависимости от глубины каталогов

вы можете передавать переменные в awk , и ваша команда будет выглядеть так:

awk -v col1=1 -v col2=2 '{ for(i=1; i<=NF;i++) {if (i == $col1 || i == $col2 ) sum+=$i}; print(sum); sum=0 }' $FILE
  • -v var = value присваивает значение программной переменной var.

вы можете добавить столько столбцов, сколько хотите, просто добавьте -v colx = value , а затем добавьте ot к условию || i == $ colx

Если вы хотите передать номер столбца в сценарий оболочки, вы можете добавить их в массив, скажем, columnsArray , а затем создать переменную columns = $ (echo " $ {columnsArray [@]} ") , тогда ваша команда должна выглядеть так:

awk -v outCols="$columns" 'BEGIN{split(outCols, cols, " ")} { for(i=1; i<=NF;i++) {if (i in cols ) sum+=$i}; print(sum); sum=0 }' $FILE

например,

#!/bin/bash
columns=$(echo "$@")
awk -vcolss="$columns" 'BEGIN{split(colss, cols, " ")}{ for(i=1; i<=NF;i++) {if (i in cols ) sum+=$i}; print(sum); sum=0 }' test

вернет:

3
3
1
2
27.03.2017, 01:48
1 ответ

Вы можете создать функцию, которая это сделает. Это не идеально, абсолютно не портативно, но, похоже, работает. Чтобы использовать его в $PS1, вам просто нужно изменить $fg_и$bg_(на %F/%Bили $fg/$bg, я не помню )и setup и precmd hook(add-zsh-hook precmd function_precmd)с функцией, которую вы создадите и которая будет изменять переменную, используемую в $PS1.

Для настройки функции необходимо правильно установить PRE _ASSOC.

function colorize_array () {
    local reset='\033[0m'

    for (( i = 1; i <= $# ; i++ )); do
        pre=""

        if (( $+PRE_ASSOC[$i] )); then
            pre=$PRE_ASSOC[$i]
        elif (( $+PRE_ASSOC[$(( $i - $# - 1 ))] )) ;then
            pre=$PRE_ASSOC[$(( $i - $# - 1 ))]
        else
            pre=$PRE_ASSOC[default]
        fi
        echo -n -e $pre$@[$i]$reset
    done
}

typeset -A fg_ bg_ 
typeset -A PRE_ASSOC

fg_=([black]="\033[30m" [white]="\033[37m" [red]="\033[31m" [yellow]="\033[33m" [cyan]="\033[36m")
bg_=([black]="\033[40m" [white]="\033[47m" [red]="\033[41m" [yellow]="\033[43m" [cyan]="\033[46m")

PRE_ASSOC=([default]="$fg_[cyan]/" [1]="$fg_[red]"  [-1]="$fg_[yellow]/")

local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})

out=$(colorize_array $pwd_list)
echo $out

Код далек от совершенства, но работает.

0
27.01.2020, 22:41

Теги

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