質問があります。座標付きのファイルがあります(TAB
分離)
2 10
35 50
90 200
400 10000
...
最初の行の 2 番目の列から 2 番目の行の最初の列を減算したい、つまり距離を計算したい、つまり次のファイルが欲しい
25
40
200
...
awkを使用してそれを行うにはどうすればよいですか??? 事前にどうもありがとうございました
ここに awk ワンライナーが役立ちます:
kent$ awk 'a{print $1-a}{a=$2}' file
25
40
200
評価に sed と ksh を使用する
sed -n "
1x
1!H
$ !b
x
s/^ *[0-9]\{1,\} \(.*\) [0-9]\{1,\} *\n* *$/\1 /
s/\([0-9]\{1,\}\)\(\n\)\([0-9]\{1,\}\) /echo \$((\3 - \1))\2/g
s/\n *$//
w /tmp/Evaluate.me
"
. /tmp/Evaluate.me
rm /tmp/Evaluate.me
純粋なbashソリューションは次のとおりです。
{
read _ ps
while read f s; do
echo $((f-ps))
((ps=s))
done
} < input_file
これは、bash の演算を使用するため、(小さな) 整数がある場合にのみ機能します。任意のサイズの整数または浮動小数点数を処理する場合は、次を使用できますbc
(フォークは 1 つだけ):
{
read _ ps
while read f s; do
printf '%s-%s\n' "$f" "$ps"
ps=$s
done
} < input_file | bc
今、私は他の人が気まずい答えを出します!
さて、誰も私の答えに賛成票を投じたくないので、bashとを使用する本当に面白いソリューションを次に示しbc
ます。
a=( $(<input_file) )
printf -- '-(%s)+(%s);\n' "${a[@]:1:${#a[@]}-2}" | bc
または同じdc
(より短いですが、負の数では機能しません):
a=( $(<input_file) )
printf '%s %sr-pc' "${a[@]:1:${#a[@]}-2}" | dc