-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvarize
More file actions
116 lines (103 loc) · 3.58 KB
/
Copy pathvarize
File metadata and controls
116 lines (103 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/sh
# oxr 2025
# Asigna a una o mas variables la salida de una orden o registros de un archivo;
# por linea y campo. Incluir '. varize' para que la asignacion surta efecto
#
# \\r varize [-e] (-a archivo) [-l lº] [-n [cº [rº]]] {-m} var {var var... --} (orden)
#
# '-e' muestra el valor
# '-a' archivo del que leer, excluye 'orden' y viceversa
# '-s' separador de campos
# '-t' Elimina sobreespaciado -- EN PRUEBAS con trip
# '-n' Asigna desde cº campo a cada variable hasta rº. Sin limite si no rº.
# ··· Si rº=0|1 y hay resto, a la ultima
# ··· Indicando un cº negativo asigna los ultimos campos
# '-l' lee de esa linea. Si no -n, se repartira entre las variables.
# ··· Si lº=0 sera la ultima linea.
# '-m' multiples variables. '--' fin de variables, opcional si solo una.
# 'var' nombre de variable a asignar
# 'orden' no puede tener tuberias '|', ignora el entrecomillado
#
# \\r varize -e -m p n -- pgrep -l -r R
#
# \\r varize -l 2 u df -h --output=used ; echo $u
#
# \\r varize -e -n 3 -m x y -- echo no tampoco si tambien ignorado
#
# EN PROCESO - DEFINIENDO SEPARADOR DE CAMPOS NO FUNCIONA
#
[ $include_ctl ] || . include ; include trip enum # isnum - enum incluye isnum
varize(){
[ $# -gt 1 ] || { infsh -i $code/varize 3 25 ; return ;}
local ae=false cp=0 ec=true ln="" rt="" sp=" " tp=$tmp/varize tr=false
# ae archivo|comodin - cp campo - ec echo - ln linea - rt resto/comodin - sp separador - tp tmp - tr eliminar sobreespaciado|comodin
local varize_c="" varize_v="" varize_x="" # Diferenciadas para evitar conflictos por tratar variables externas
# c campos/comodin - v nombres_variables - x comodin
while [ $# -ne 0 ] ; do case $1 in # opciones
-e) ec=false ; shift ;;
-m) shift ; varize_v=$@ ; varize_v=${varize_v%% --*}
enum -c $varize_v ; shift $(($?+1))
set -- $@ ; break ;;
-l) ln=$2 ; shift 2 ;;
-n) shift ; isnum $1 && {
cp=$1 ; shift ; ! isnum $1 || { rt=$1 ; shift ;}
} || cp=1 ;;
-a) cp "$2" $tp ; ae=true ; shift 2 ;;
-s) sp="$2" ; shift 2 ;;
-t) tr=true ; shift ;;
*) varize_v=$1 ; shift ; [ "$1" = -- ] && shift ; break ;;
esac ; done
$ae || "$@" > $tp # ejecucion orden
! $tr || { # quitar espacios extra
while read ae ; do trip -n -u " " "$ae" > $tp".tr" ; done < $tp
cp $tp".tr" $tp
}
[ ${#ln} -eq 0 ] || { # linea
[ $ln -eq 0 ] && { # ultima linea
while read ln ; do
[ ${#ln} -eq 0 ] && continue || varize_x=$ln
done < $tp
ln=$varize_x
} || { # tal linea
enum ae $ln
for varize_x in $ae ; do read ln ; done < $tp
}
echo "$ln" > $tp
}
[ $cp -eq 0 ] || { # campos
read ln < $tp
IFS=$sp enum ae -c "$ln"
[ $ae -lt $cp ] && { # campo inexistente
eval unset $varize_v # puede dar el valor que tenia antes
return
} || { # primer campo
[ $cp -lt 0 ] && { # establece los $cp ultimos campos
tr="" #cp=$((cp*-1))
enum ae $((ae+cp))
for i in $ae ; do tr="$tr*$sp" ; done
ln="${ln#$tr}" #cp=0
}
enum ae $((cp-1))
for varize_x in $ae ; do varize_c=$varize_c'*'$sp ; done
varize_c=${ln#$varize_c}
[ $cp -gt -1 ] || cp=$((cp*-1)) # Dependiendo de esto en modo normal le asigna el resto
[ ${#rt} -ne 0 ] || { # por variables
[ $cp -lt 0 ] && rt=1 || { enum -c $varize_v ; rt=$((($?+cp)-1)) ;} #
} # ultimo campo
IFS=$sp enum -c "$ln"
enum ae $(($?-rt))
rt=""
for varize_x in $ae ; do rt=$rt$sp'*' ; done
varize_c=${varize_c%$rt}
echo "$varize_c" > $tp
}
}
[ "$sp" = " " ] && eval read $varize_v < $tp || eval IFS=$sp read $varize_v < $tp # asignacion a variables
$ec || { # echo
for varize_x in $varize_v ; do eval varize_c=\$$varize_x
echo "$varize_c"
done
}
}
[ ${0##*/} != varize ] || varize "$@"
#