LINUX.ORG.RU
ФорумAdmin

Сравнение значений на bash

 


2

2

Есть 2 файла с содержимым следующего вида

имя значение
Файл 1
green 1
yellow 5
red 11
blue 6
Файл 2
green 22
yellow 66
red 52
blue 89
Мне нужно из значений файла 2 вычесть значения файла 1 и получать эту разницу

Но тут еще сложность в том, что имена могут удаляться и добавляться другие. Поэтому обычное сравнение к примеру 2х файлов не подойдёт.

Как мне это лучше всего реализовать?

Ответ на: комментарий от gremlin_the_red

Не на bash.

Ну да, ну да. Баш тут идеален. Делов то...

declare -A f1 f2

while read name value; do
        f1["$name"]=$value
done < f1.txt

while read name value; do
        f2["$name"]=$value
done < f2.txt

for n in "${!f1[@]}"; do
        echo "$n" $((${f2["$n"]}-${f1["$n"]}))
done

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)

На Питон.

Либо считай их в два словаря и сравнивай, либо формируй общий словарь, который будет содержать разницу между файлами.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от vodz

Спасибо. Это просто божественно. Только я вот не понял момент с «${!f1[@]}», как это работает. Только понял что «не равно переменной f1», но относительно чего? По идеи должно быть f2, но тут такого нету. Как эта конструкция работает ?)

sandrey81
() автор топика
Ответ на: комментарий от madcore

ну добавить

Все «ну тут рыбу заворачивали» должны чётко сформулированы, иначе так и будет «ну тут добавить». ТС-а удовлетворило и как шаблон для разбора и прочего творчества - пример идеален.

vodz ★★★★★
()
Ответ на: комментарий от madcore

не спорю

Ну не правда же. Результат как -f1 вполне может быть так и задуман, почему нет, не сформулировано, значить и не реализовано.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.