2013-09-13 3 views
0

У меня есть набор значений, как показано ниже.Найти максимальную величину и распечатать

-4.904045E+04 3.972944E+04 
-1.205839E+05 3.662380E+04 
-1.950760E+04 1.020331E+01 
-1.128968E-01 1.129738E+05 
-8.031810E+01 1.466682E+05 
-4.914462E+04 2.353826E+03 
-4.020837E+04 3.524823E+01 
-3.058178E+03 1.234481E+04 

Я хотел бы найти максимальную величину двух и напечатать результат с оригинальным знаком (нагативный или положительный).

Ex: мне нужен результат, как этот:

-4.904045E+04 
-1.205839E+05 
-1.950760E+04 
1.129738E+05 
1.466682E+05 
-4.914462E+04 
-4.020837E+04 
1.234481E+04 

Пожалуйста, дайте мне знать код для выполнения этого. Спасибо заранее.

+3

Что это связано с * nix и что вы пробовали? – jordanm

+0

@jordanm, он помечен/shell-script, поэтому Марк просит решение с использованием сценария оболочки Unix. Этот вопрос очень распространен здесь –

ответ

2

Если $1 всегда отрицательна и $2 всегда положителен:

awk '{print(-$1>$2?$1:$2)}' < your-file 

Если нет:

awk 'function abs(x) {return (x<0?-x:x)} 
    {print(abs($1)>abs($2)?$1:$2)}' < your-file 
2

И вот Perl один:

perl -alne 'abs($F[0])>abs($F[1]) ? print $F[0] : print $F[1]' < file 

Флаги:

  • -e: дайте скрипт в командной строке
  • -n: запускать скрипт, данное e на каждой строке входного файла
  • -a: разбивает каждую строку на белом пространстве в массив @F
  • -l : автоматически добавляет новую строку (\n) каждому print.
Смежные вопросы