Pergunta
Jack 10 J 10 A 20 Lu cal 20 A bc U 20
I want to get the sum of these nums: 10+10+20+20+20 = 80
but I can't use cat input|cut -d " " -f 3
to get the num, how can I do it?
Solução
You can use grep + paste + bc
$ grep -oE '[0-9]+' file
10
10
20
20
20
$ grep -oE '[0-9]+' file | paste -s -d + -
10+10+20+20+20
$ grep -oE '[0-9]+' file | paste -s -d + - | bc
80
instead grep, you can use cut
$ cut -c 8- file
or just awk
$ awk '{print $NF}' file
BUT if you can use awk, you can sum using awk
$ awk '{total += $NF} END { print total }' file
Outras dicas
Assuming your file is called input.txt:
echo `sed 's/[^0-9]*\([0-9]*\).*/\1+/' input.txt` '0' | bc
(I'm sure there is a more elegant way to do it with sed or perhaps awk, this is just a quick hack to add a terminating '0' to make bc happy. Run different parts of the command separately to figure out what's going on)
You could replace all whitespace with a + and pipe the result to bc
echo "5 6 2" | sed -E -e 's/\s+/+/g' | bc
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow