2013-11-26 3 views
0

В моей программе мне нужно сравнить значение между столбцом.У меня есть файл ввода, который выглядит так:

  • Сравнение между $3 и $1, Печать только максимальное значение из $1
  • Сравнение между $3 и $2, Печать только мин значение от $2
  • также сравнить с $1[i] и $1[i+1]

Данные:

150; 145.15; 148; 
149.43; 143.62; 148; 
147.45; 141.95; 148; 
147.09; 141.46; 148; 
147.59; 141.49; 148; 
147.22; 141.41; 148; 
147.34; 141.33; 148; 
147.54; 141.32; 148; 
148.23; 141.36; 148; 
149.04; 141.24; 148; 

Вот код:

#!/bin/bash 
awk ' 
BEGIN { 
    FS=";"; 
} 
{ 
    if(NR>1) 
    { 
    Max = $1 
    Min = $2 
    Com = $3 
    if(Max>Com) 
    { 
     NMax = Max 
     if(Max>Com && NMax<Max) 
     { 
     NMax = Max 
     } 
    } 
    if(Com>Min) 
    { 
     NMin = Min 
     if(Min<Com && NMin<Min) 
     { 
     NMin = Min 
     }  
    } 
    } 
    if(NR>1)     
    printf "%9.2f;%9.2f;%9.2f;%9.2f;%9.2f;\n", $1,$2,$3,NMax,NMin 
}' data.txt > out.txt 

Выходной сигнал:

149.43; 143.62; 148.00; 149.43; 143.62; 
147.45; 141.95; 148.00; 149.43; 141.95; 
147.09; 141.46; 148.00; 149.43; 141.46; 
147.59; 141.49; 148.00; 149.43; 141.49; 
147.22; 141.41; 148.00; 149.43; 141.41; 
147.34; 141.33; 148.00; 149.43; 141.33; 
147.54; 141.32; 148.00; 149.43; 141.32; 
148.23; 141.36; 148.00; 148.23; 141.36; 
149.04; 141.24; 148.00; 149.04; 141.24; 

Но я хочу выход Похожи

149.43; 143.62; 148.00; 148.23; 143.62; 
147.45; 141.95; 148.00; 148.23; 143.62; 
147.09; 141.46; 148.00; 148.23; 143.62; 
147.59; 141.49; 148.00; 148.23; 143.62; 
147.22; 141.41; 148.00; 148.23; 143.62; 
147.34; 141.33; 148.00; 148.23; 143.62; 
147.54; 141.32; 148.00; 148.23; 143.62; 
148.23; 141.36; 148.00; 148.23; 143.62; 
149.04; 141.24; 148.00; 148.23; 143.62; 
+3

Я должен сказать, что это не очень понятно, что вы хотите. Можете ли вы попытаться улучшить объяснение? – fedorqui

+0

Предположим, что в $ 1 получить три значения, $ 3 (148.00) <$ 1 (149.43, 148.23, 149.09) Я хочу выбрать только макс $ 3 (148.00) <148.23 –

ответ

0

Вы можете попробовать

awk -f p.awk input.txt 

где input.txt ваш входной файл и p.awk является

BEGIN { 
    FS=";"; 
} 

NR>1{ 
    if (NR==2) { 
     NMax=$1 
     NMin=$2 
     a=$1 
     b=$2 
    } 
    else { 
     if($1>$3) 
      NMax = $1 
     if($3>$2) 
      NMin = $2 
     a=(NMax<a)?NMax:a; 
     b=(NMin>b)?NMin:b; 
    } 
    a1[NR]=$1; a2[NR]=$2; a3[NR]=$3 

} 

END { 
    for (i=2; i<=NR; i++) 
     printf "%9.2f;%9.2f;%9.2f;%9.2f;%9.2f;\n", a1[i],a2[i],a3[i],a,b 

} 
+0

Большое спасибо Хакон –

Смежные вопросы