重新格式化文件以加载到数据库中。
文件的详细信息在代码下方给出。

到目前为止我所拥有的。
除计算小时数外,其他所有操作均有效。

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?

最佳答案

我认为您在打印声明中犯了一个错误:

print $hour

这将取消引用以小时为单位的值,并在hour中存储的位置获取字段的值,而
print hour

将在变量hour中打印实际值。

关于loops - awk为循环增量值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42008368/

10-11 19:57