
私はコーディングに慣れていませんが、私の職業上のテキストファイルを処理する必要がありますが、私が経験している問題について助けが必要です。
いくつかの数字を含む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