awk循环中的增量值

3
重新格式化文件以加载到数据库中。 下面是有关文件的详细信息。
我目前所拥有的。 除了计算小时数之外,一切正常运作。
awk 'BEGIN{ FS="|" ; OFS="\t" };
   { for (i = 4; i < NF; i=i+2 ) {          
# +2 Because need to walk row in pairs of QC/Value(s)
       if ( NF == 52 )  {   

            hour = (i - 2)/2  
# Need the value of i, not what is stored in position i.

            qualitycode = i     
            value = i + 1
            print ( $1,$2,$3,$hour,$qualitycode,$value )
        } else {
            print ( "ERROR",$NR,$0 )        
        }
    }
}' $origfile > $tempfile

cat $tempfile | grep ERROR > $errfile

cat $tempfile | grep -v ERROR > $newfile

如何获取 i 的值而不是存储在位置 i 中的值?

如果您感兴趣。

原始数据文件的格式如下:

Module|Sensor|Date|QC1|Value1|QC2|Value2|QC3|Value3|......|QC23|Value23|QC24|Value24|
90123|PQRST|20161015|4|12.45|4|11.23|4|10.40|4|9.89|......|4|21.36|4|20.55|
65432|BCDEF|20161015|4|6.45|4|7.51|2|9.01|4|11.74|.....|4|18.92|4|16.4|
.....many more rows

有多个模块,每个模块都有多个传感器。

希望重新格式化以加载到数据库中:

Module\tSensor\tDate\tHour\tQC1\tValue1   
Module\tSensor\tDate\tHour\tQC2\tValue2   
Module\tSensor\tDate\tHour\tQC24\tValue24

每个模块/传感器/日期的小时数当然需要从1递增到24?

1
你试过使用valuei而不是$value$i吗? - Lars Fischer
2个回答

1
我觉得你在打印语句中犯了一个错误:
print $hour

这将取消引用hour中的值,获取存储在hour位置的字段的值,而
print hour

将变量hour的实际值打印出来。

0
awk -F'|' -vOFS='\t' '{
    d=(NF-4)/2; j=3
    for (i=1; i<=d; ++i) {
        print $1,$2,$3,i,"QC" i, $(j+=2)
    }
}' "$origfile" > "$tempfile"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接