mam zmienne takie jak „1,2,3,4”liczyć konkretne słowo w wierszu bash
chcę liczyć przecinków w tym tekście w bash
jakiś pomysł?
dzięki za pomoc
mam zmienne takie jak „1,2,3,4”liczyć konkretne słowo w wierszu bash
chcę liczyć przecinków w tym tekście w bash
jakiś pomysł?
dzięki za pomoc
To będzie robić to, co chcesz:
echo "1,2,3" | tr -cd ',' | wc -c
Isolate przecinki na linię, liczą linie:
echo "$VAR"|grep -o ,|wc -l
Off szczycie mojej głowy przy użyciu czystego bash:
var="1,2,3,4"
temp=${var//[^,]/}
echo ${#temp}
Zmień drugi wiersz na: 'temp = $ {var // [^,] /}' następnie usuwa każdy nie-przecinek. –
Dobra rozmowa, dziękuję za przypomnienie. – SiegeX
Rozwiązanie czysto bash bez programów zewnętrznych:
$ X=1,2,3,4
$ count=$(($(IFS=,; set -- $X; echo $#) - 1))
$ echo $count
3
$
Uwaga: To niszczy parametry pozycyjne.
Eval i pojedyncze cytaty są niepotrzebne. –
@Dennis: Ok. Pozbyłem się ich. – camh
Innym czystego roztworu atakujących:
var="bbb,1,2,3,4,a,b,qwerty,,,"
saveIFS="$IFS"
IFS=','
var=($var)x
IFS="$saveIFS"
echo $((${#var[@]} - 1))
wyjściowy natomiast "10" w ciągu pokazane.
Nie działa z 'var =" 1,2,3 "' (wydaje się działać tylko wtedy, gdy istnieje przecinek końcowy). –
@Alok: Dzięki za wskazanie tego. Zostało to naprawione. Jednak bardziej lubię ** wersję SiegeX ** **. –
bardzo prosto z awk
$ echo 1,2,3,4 | awk -F"," '{print NF-1}'
3
tylko z muszli
$ s="1,2,3,4"
$ IFS=","
$ set -- $s
$ echo $(($#-1))
3
echo '1,2,3' | grep -o ',' | wc -l
dzięki dokładnie to, co chcę;) – soField
nie wiedział o tym tr -c użycia, ładny –
faktycznie tr -cd wykonuje to zadanie dobrze :) – soField