ループで sed を使用する

ループで sed を使用する

.txt次の構造のファイルがあります。

20170515000650883,208,-32,-896,stand
20170515000651883,336,96,-928,stand
20170515000652982,368,64,-896,stand
20170515000653982,256,-48,-816,lie
20170515000654982,368,48,-832,lie
20170515000655982,15081,32,-688,lie
20170515000656982,15081,48,-864,lie
20170515000657983,15081,112,-1072,lie
20170515000658983,15081,-32,-992,lie
20170515000659983,15081,-48,-1072,lie
20170515000700983,15081,-32,-880,lie
20170515000701983,15081,16,-832,stand
20170515000702983,15081,-48,-720,stand
20170515000703983,15081,0,-896,stand
20170515000704983,15081,112,-880,lie
20170515000705983,15081,-48,-1072,lie
...

lie私の目標は、最後の列に表示されたイベントを検索することです。これが私が悟ったもの

sed -n '13,$s/lie/&/p' $subj > $SUBJECTS_DIR/temp.txt

私は13行目から検索を開始し、「嘘」を含むすべての行を一時ファイルに保存しました。しかし、sedコマンド中にデータを収集できますか?最初の列にはタイムスタンプが含まれています。したがって、lie = TRUEのときにcolumn_1から値を収集したいと思います。また、シーケンスの最後の嘘が発生した場合(合計8つの「嘘」)時差。検索はファイルの最後まで続ける必要があります。その期間中にこの情報を収集する方法を知っている人はいますか? sed?

ベストアンサー1

これにはawkを使用できます。

awk -F"," '/lie/{a[++i>2?2:i]=$1}END{print a[2] - a[1] }' input.txt

awkコマンドは、「lie」に一致する最初の最後のタイムスタンプを配列に格納します。ファイルを読み取った後、awk は最後の一致から最初の一致を引いたものです。

おすすめ記事