3つの列と任意の数の行(行)を持つファイルがあるとします。各行はxyz座標に対応します。
1 2 3
4 5 6
7 8 9
10 11 12
...
最初と2番目の座標、2番目と3番目の座標、3番目と4番目の座標などの距離をどのように計算しますか?
これが私がすることです。しかし、私の考えはもっと簡単かもしれません。
a=`wc -l < oldfile`
for i in $(seq 2 $a); do
j=$((i-1))
sed -n "${j},${i} p" <oldfile
done > ala
split ala -l 2 ala.
for i in ala.??; do
echo `cat $i`| awk '{printf "%.10f \n", sqrt (($4-$1)^2 + ($5-$2)^2) + ($6-$3)^2}'
done > newfile
どんな答えでも大歓迎です。私はLinuxプログラミングに初めて触れたので、および/またはを使用する簡単なコマンドを使用して非常に感謝しsplit
ます:)。cat
echo
awk
ありがとうございます。
ベストアンサー1
次のawk
コマンドは、名前付きファイルの1行からスペースで区切られた(x、y、z)座標を読み取り、file
各行間の距離を計算します。
awk '
NR > 1 { printf "%f\n", sqrt(($1-x)^2 + ($2-y)^2 + ($3-z)^2) }
{ x=$1; y=$2; z=$3 }' file
上記のコマンドは、awk
最初の行を除くすべての行について、現在の行に与えられたポイントから前の行に与えられたポイントまでの距離を記録します。変数と には、x
距離値を計算して出力した後に更新された前の行の座標が含まれます。y
z
入力あり
7 4 3
17 6 2
-2 0 0
...結果は
10.246951
20.024984