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

时间:2016-06-29 19:51:01

标签: bash shell unix awk gawk

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

示例标题中有四个日期
我想检查字段1'数字'的日期下的值。并根据使用shell的值标记值 例如,如果值介于0到100之间,那么L' 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|

1 个答案:

答案 0 :(得分:1)

一个快速而又肮脏的例子:

  • 将输入和输出字段分隔符(-FOFS设置为|
  • 打印标题(记录NR==1
  • 为所有其他人打印字段1-5,然后对字段2-5
  • 执行函数lh
  • 定义函数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;
 }