列の値が変更されると、間隔が計算されます。

列の値が変更されると、間隔が計算されます。

私はコーディングに慣れていませんが、私の職業上のテキストファイルを処理する必要がありますが、私が経験している問題について助けが必要です。

いくつかの数字を含む2つの列を持つファイルがあります。

180.000000   115.944480
180.000000    95.979157 
180.000000    93.583322 
178.593750   122.797168 
178.593750   120.000000 
178.593750   117.279613 
178.593750   102.024699 
178.593750    99.594068
   ...           ...

2 番目の列には、最初の列の固有値に関連付けられた複数の値があります。これで、列1の各固有値に対して列2の値間隔を印刷しようとします。

希望の出力:

115.944480 93.583322
122.797168 99.594068
...

もちろん、1列目の値が変わった場合はその値を保存し、2列目の前の値と最新の値を出力する必要があります。しかし、問題は次のとおりです。 bashやawkでこれを行う方法は?

ベストアンサー1

Awk初期条件に対するソリューション「列1の各固有値について、列2の値間の間隔」(あなたの状況が大きく変わったため):

awk 'NR > 1{ 
         if ($1 == num1) intvl += num2 - $2;
         else { print intvl; intvl = 0 }
    }
    { num1 = $1; num2 = $2 }
    END{ print intvl }' file

出力例:

22.3612
23.2031

2番目の条件を満たす「列1の値が変更されると、列2の前の値と最新の値が印刷されます。」:

awk '!a[$1]++{ 
         if (first != "") { print first, last; first = last = "" }
         first = $2
     }
     { last = $2 }
     END{ print first, last }' file

出力:

115.944480 93.583322
122.797168 99.594068

おすすめ記事