сравнение значений из текстового файла

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
safronowmax
Сообщения: 103

сравнение значений из текстового файла

Сообщение safronowmax »

Подскажите пж-та, никак не могу сообразить - есть текстовый файл, который содержит числовые значения в 2 столбцах, например:
5 17
3 12
8 11

Необходимо прочитать данные из файла, сравнить 2 значения в каждой строке и вывести, какое значение больше. Никак не могу понять, как это сделать
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: сравнение значений из текстового файла

Сообщение olecya »

Код: Выделить всё

awk '{print ($1>$2)?$1:$2}' file
Добавлено (15:25):

Код: Выделить всё

awk '{$0=($1>$2)?$1:$2}1' file
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: сравнение значений из текстового файла

Сообщение Hephaestus »

Код: Выделить всё

#/bin/bash
while read a b; do

if [ "$a" -ge "$b" ]; then
echo $a
else
echo $b
fi

done <file.txt
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: сравнение значений из текстового файла

Сообщение olecya »

Hephaestus, здесь тоже можно применить тернарный оператор,

Код: Выделить всё

while read a b; do
        echo $(( b<a ? a : b ))
done <file
Добавлено (15:56):
Можно проверку в цикле на всякий случай добавить

Код: Выделить всё

while read a b; do
        [[ "$a$b" =~ [^0-9] ]] && continue
...
Спасибо сказали:
safronowmax
Сообщения: 103

Re: сравнение значений из текстового файла

Сообщение safronowmax »

Подскажите еще пожалуйста, пытаюсь теперь учесть, если значения совпадают в столбцах, но не срабатывает, слово "совпадение" выводится в любом случае, причем при каждом выполнении шага цикла

Код: Выделить всё

while read a b; do

if [[ "$a" = "$b" ]]; then
echo "совпадение"
else
echo $b
fi

done <file
В результате выводится:
1
7
4
совпадение
совпадение
совпадение
совпадение

Вот содержимое файла:
0 1
5 7
3 4
Последний раз редактировалось Bizdelnick 26.02.2020 12:53, всего редактировалось 1 раз.
Причина: тег code
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: сравнение значений из текстового файла

Сообщение Bizdelnick »

safronowmax писал(а):
26.02.2020 12:17
слово "совпадение" выводится в любом случае, причем при каждом выполнении шага цикла
У меня не выводится. Ни в bash, ни в ksh, ни в zsh. dash предсказуемо ругается на отсутствие команды [[.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: сравнение значений из текстового файла

Сообщение /dev/random »

safronowmax
У вас, похоже, 4 пустые строки в конце файла.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: сравнение значений из текстового файла

Сообщение olecya »

safronowmax писал(а):
26.02.2020 12:17
if [[ "$a" = "$b" ]]; then
В двойных скобочках необходимо ==
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: сравнение значений из текстового файла

Сообщение /dev/random »

olecya писала:
26.02.2020 14:56
В двойных скобочках необходимо ==
man bash писал(а): [[ expression ]]
[...] The = operator is equivalent to ==. [...]
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: сравнение значений из текстового файла

Сообщение olecya »

Перепишем проверку в начале цикла

Код: Выделить всё

[ ${b//[^0-9]} ] || continue
Добавлено (16:03):

Код: Выделить всё

awk '
/^\s*$/         {next}	#!NF {next}
$1 >  $2        {print $1}
$1 <  $2        {print $2}
$1 == $2        {print "совпадение"}
' file
Спасибо сказали:
Ответить