2016-06-29 6 views
0

У меня есть файл как
NUMBER|05-1-2016|05-2-2016|05-3-2016|05-4-2016|
0000000 | 0 | 225.993 | 0 | 324|
0003450 | 89| 225.993 | 0 | 324|
0005350 | 454 | 225.993 | 54 | 324|Проверить значение и Tag в соответствии с этим значением и добавьте в той же строке, используя оболочку

В примере Там будут четыре даты в заголовке
Я хочу проверить значение под датой поля 1 'номер' и значения тегов в соответствии с этим, используя пример оболочки , если значение находится между 0-100 тегом 'L' и если больше 100, тег 'H' Таким образом, выходной сигнал должен быть как
NUMBER|05-1-2016|05-2-2016|05-3-2016|05-4-2016|05-1-2016|05-2-2016|05-3-2016|05-4-2016|
0000000 | 0 | 225.993 | 0 | 324| L | H | L | H|
0003450 | 89| 225.993 | 0 | 324|L | H | L | H|
0005350 | 454 | 225.993 | 54 | 324|H | H | L | H|

+0

Пожалуйста, взгляните на [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

ответ

1

Быстрый и грязный пример, что:

  • устанавливает входной и выходной разделитель полей (-F и OFS ниже) до |,
  • печатает заголовок (запись с NR==1)
  • для всех остальных печатают поля 1-5, а затем выполняет функцию lh для полей 2-5
  • определяет функцию LH, как один возвращающийся L для значений < 100, и H для всех остальных

Код:

awk -F \| ' 
BEGIN {OFS="|"} 
NR==1 {print} 
NR > 1 {print $1, $2, $3, $4, $5, lh($2), lh($3), lh($4), lh($5) } 
function lh(val) { return (val < 100) ? "L" : "H"} 
' file.txt 

Альтернативная функция lh:

function lh(val) { 
    result = ""; 
    if (val < 100) { 
     result = "L"; 
    } else { 
     result = "H"; 
    } 
    return result; 
} 
+0

спасибо, но что, если условия больше, чем у 2, у меня на самом деле есть 5.Проблема для беспокойства. – meet

+0

Вы можете расширить функцию 'lh' –