他の2つの列(他のファイルの列の1つ)の機能でCSVファイルに列を追加する

他の2つの列(他のファイルの列の1つ)の機能でCSVファイルに列を追加する

詳細は次のとおりです。

.csv

一部のセンサーでは、1秒ごとにキャプチャした値が含まれており、最後の列はエポック(実際の外観1453998477.044)です。
(* sはセンサー値です)。

例:

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

b.csv

プログラムの特定の部分が開始/終了する瞬間を示す固定数のエポック(1行に1つずつ)があるため、エポックは昇順にソートされます。

次の例では、プログラムは2つの部分で構成されています。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

おすすめ記事