根据该值检查值和标签,并使用 shell 追加到同一行

Check a Value and Tag according to that value and append in same row using shell

我有一个文件
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|

例如 header
中有四个日期 我想检查字段 1 'number' 的日期下的值,并根据使用 shell 的标签值 例如,如果值介于 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|

一个简单粗暴的例子,即:

  • 将输入和输出字段分隔符(下面的-FOFS)设置为|
  • 打印 header(用 NR==1 记录)
  • for all others 打印字段 1-5,然后对字段 2-5
  • 执行函数 lh
  • 定义函数 lh,作为一个返回 L 值 < 100,和 H 返回所有其他值

代码:

awk -F \| '
BEGIN {OFS="|"}
NR==1 {print}
NR > 1 {print , , , , , lh(), lh(), lh(), lh() }
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;
 }