私はファイルの行を逆に読み取るシェルスクリプトを書いています。後者から前の行を引く必要がありますが、後者が大きい場合にのみ可能です。小さい場合は、その行の数だけが必要です。
例:
文書の内容:
100
200
300
100
300
結果は次のとおりです。
200 # line 5 - line 4
100 # line 4 (as it's < line 3)
100
100
値が> =かどうかにかかわらず、前の行を減算するために使用するコードは次のとおりです。
awk 'p{print $0-p}{p=$0}' inputfile > outputfile
それでもこれを行う必要がありますが、値が前の行よりも大きい場合にのみ可能です。
私はwhile readループを使うつもりですが、比較する各行に変数を代入するなどの操作は本当に脳集約的です。よろしくお願いします!
ベストアンサー1
tac
ファイルの行の順序を変更するのに便利です - (BSDtail -r
も行の順序を変更できます)
tac file | awk 'p { if( p>$1 ) print p-$1; else print p } { p=$1 }'
何らかの理由でtac
awkを使用できない場合、または排他的に使用したい場合は、配列を介してファイルawk
全体をメモリに読み込んだ後、END{}
配列を逆の順序で処理できます。
awk '{ r[i++]=$0}; END{ for(i=i-1; i>=0; i--)
if( r[i+1] ) if( r[i+1]>r[i] ) print r[i+1]-r[i]; else print r[i+1]
}' file