将列添加到 CSV 文件作为其他两列的函数,其中一列来自其他文件

将列添加到 CSV 文件作为其他两列的函数,其中一列来自其他文件

情况如下:

.csv

包含一些传感器每 1 秒捕获一次的值,最后一列是纪元(它们实际上看起来像1453998477.044)。
(*s 是传感器值)。

例子:

* , * , * , 2.356
* , * , * , 3.356
* , * , * , 4.356
* , * , * , 5.356
* , * , * , 6.356
* , * , * , 7.356
* , * , * , 8.356

b.csv

有固定数量的纪元(每行一个),指示程序的某一部分开始/完成的时刻,因此纪元按升序排序。

在下一个示例中,程序有两个部分,2.421第一部分于 开始并于 完成5.500,然后另一部分于 完成8.012

2.421
5.500
8.012

问题

这个想法是添加一个具有a.csv以下属性的列:

  1. 默认情况下它用零填充。
  2. 在每一行中,如果纪元与其中的某些起始/结束纪元最接近,b.csv则必须有一个 1。

按照上面的例子,期望的输出是这样的:

* , * , * , 2.356 , 1
* , * , * , 3.356 , 0
* , * , * , 4.356 , 0
* , * , * , 5.356 , 1
* , * , * , 6.356 , 0
* , * , * , 7.356 , 0
* , * , * , 8.356 , 1

PS:问题本身是一个普遍性的问题,但我很难笼统地解释它,所以我用了一个具体的案例

多谢你们

答案1

命令:

awk 'NR==FNR {values[NR]=$1; next;}
    { if (values[1]>values[2]) newvalue=0; else newvalue=1;
      print $0 "," newvalue; }' b.csv a.csv

输出:

*,*,*,1,1
*,*,*,2,1
*,*,*,3,1

相关内容