0

早上好 ,

帮助生成包含多行的文件将是一列。

文件 movimenta.txt

data             medicine         value
====             =======         =====
01.01.2019 01:00   m1             1
01.01.2019 02:00   m1             2
01.01.2019 03:00   m1             5
01.01.2019 04:00   m1             6
01.01.2019 01:00   m2             12
01.01.2019 02:00   m2             22
01.01.2019 03:00   m2             52
01.01.2019 04:00   m2             62
01.01.2019 01:00   m3             13
01.01.2019 02:00   m3             23
01.01.2019 03:00   m3             53
01.01.2019 03:00   m3             63

文件 data.txt(分组)

data
====
01.01.2019 01:00   
01.01.2019 02:00   
01.01.2019 03:00   
01.01.2019 04:00 

文件medicine.txt(分组)

remedio
=======
m1
m2
m3

** 在下面组装文件时遇到困难 **** columnar.txt 文件(这将是 data.txt 文件所在的三个文件的交汇处,加上 movimenta.txt 文件中的行将是该文件中的一列)

data                   m1      m2    m3
01.01.2019 01:00       1       12    13
01.01.2019 02:00       2       22    23
01.01.2019 03:00       5       52    53
01.01.2019 04:00       6       62    63

注意:movimenta.txt 文件是动态的,您可以在其中拥有更多的下一代药物,您可以拥有 m4、m5、m6、m7 等药物

4

1 回答 1

0

你真的需要datamedicine文件吗?还是仅显示文件中列出的日期/时间戳和药物就足够了movimenta?这是一个脚本,它可以根据一个文件为您提供所需的输出格式:

#!/usr/bin/awk -f

BEGIN {FS = "   *m?";}

NR > 2 {
    listOfDt[$1] = 1;
    sumData[$1,$2] = $3;
    if (max < $2) {max = $2;}
}

END {
    printf("%-16s","data");
    for (i = 1; i <= max; i++) {printf("%6s","m" i);}
    print "";

    for (dt in listOfDt) {
        line = sprintf("%-16s",dt);
        for (i = 1; i <= max; i++) {
            line = line sprintf("%6d",sumData[dt,i]);
        }
        print line | "sort";
    }
}

如果上述文件的名称是medicine-summary,您可以这样使用它:

medicine-summary movimenta.txt

根据上面的数据,它输出

data                m1    m2    m3
01.01.2019 01:00     1    12    13
01.01.2019 02:00     2    22    23
01.01.2019 03:00     5    52    63
01.01.2019 04:00     6    62     0

(您没有在示例 movimenta 文件中包含 04:00 的 m3 条目)。

请注意使用“至少 2 个空格加上 0 或 1 个字母 m”作为字段分隔符。

对于文件的第 2+ 行,它保留了不同日期/时间值的列表,以及在该日期/时间值的每种药物的值,以及最大的药物标识符。

在 END 块中,它打印文件中表示的每个日期/时间戳,以及文件中表示的每种药物的值,将输出通过管道传输到 UNIXsort命令,以便按时间顺序显示数据(但前提是所有数据都对于同一个月——更好地格式化日期yyyy-mm-dd HH:MM以便于排序并避免混淆现有格式是dd.mm.yyyy还是mm.dd.yyyy)。

不会显示的是

  • data文件中未表示的movimenta文件中的任何日期/时间值
  • 文件中的药物标识符medicine大于文件中出现的最大moviementa标识符
于 2020-06-24T20:38:26.220 回答