Вы также можете использовать параметр -X
с compgen
:
_grcat() {
local word
COMPREPLY=()
if [ 1 -eq "$COMP_CWORD" ]; then
pushd /etc/grcat &>/dev/null || return 1
word="${COMP_WORDS[COMP_CWORD]}"
local filterpat='README'
COMPREPLY=($(compgen -f -X "$filterpat" -- "$word"))
popd &>/dev/null
fi
}
complete -F _grcat grcat
compgen
принимает большинство тех же параметров, что и complete
, за исключением -p
и -r
.
compgen
также генерирует результат, записывает совпадения в стандартный вывод. complete
сохраняет правила только для будущего использования.
Следующий скрипт должен быть протестирован на гораздо большего объема данных (более 4 строк) для проверки правильного выполнения этого оператора , если (((([1] <$ 3 && $ 4 <= [2]) || (A [1] <= $ 3 && $ 4
awk '
BEGIN{SUBSEP="-"}
{ if (($3, $4) in ids)
ids[$3,$4]=ids[$3,$4] "," $1
else
ids[$3,$4]=$1
}
END{ for (rng1 in ids) {
split (rng1,A,SUBSEP)
for (rng2 in ids) {
split (rng2,B,SUBSEP)
if ((A[1]<B[1] && B[2]<=A[2])||(A[1]<=B[1] && B[2]<A[2]))
ids[rng2]=ids[rng2] "," ids[rng1]
}
}
for (rng in ids) {
for (i=1;i<=split(ids[rng],D,",");i++)
a[D[i]]=1
s=k=""
n=0
for (j in a) {
k=k s j
s=","
n++
}
print rng, n, k
delete a
}
}' formatted.file