Массивы в скриптах оболочки bash - PullRequest
3 голосов
/ 17 ноября 2011
#!/bin/sh
# Script to count the total in an array
# Define the name of the file
#
fname=names.txt

# Read in the contact details from the keyboard
echo "Please enter the following contact details:"
echo
echo "Given name: \c"
read name
echo " value: \c"
read value
# Write the details to the text file
echo $name:$value >> $fname

Я пытаюсь что-то кодировать в скриптах bash, у меня есть текстовый файл, и я ввел в него следующие имена, например:

lex +7.5
creg +5.3
xondr/xonde +1.5
gloria-1
lex +7.5
gloria -1
creg +5.3
xondr/xonde +1.5
lex +7.5
#and so on

Я хочу код или цикл, который, когда язапустите программу, она должна показать имена, которые есть в текстовом файле и показать там общее количество, если lex появляется 7 раз, а gloria 3 раза, то он показывает lex 52,5 gloria-3 и т. д. Я не знаю, поняли ли вы мою идею...

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Звучит так, будто вы хотите что-то вроде:

$ awk '{x[$1] += $2} END {for( i in x) print i, x[i]}' input-file
0 голосов
/ 18 ноября 2011
#!/usr/bin/env bash

awk '{people[$1] += $2} END {for (person in people) 
{ printf("%s %10.2f\n",person,people[person])}}' test.txt
0 голосов
/ 18 ноября 2011
#!/bin/bash
declare -A names
declare name num

#sum
while IFS=" " read name num; do
    names[$name]=$( bc <<< "${names[$name]:-0}$num" )
done

#print
for name in ${!names[@]}; do
    echo "$name: ${names[$name]}"
done

Как то так?Зависит от того, что два поля разделены пробелом и числа с префиксом + или - хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...