.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 は最後の一致から最初の一致を引いたものです。
答え2
「視差」が何であるかはわかりませんが、「嘘」を含む最初の列は次のように単純に拡張できます。
cat data.txt | grep lie | sed "s/,.*,lie//g"
grep
「うそ」がないすべての行を削除し、sed
最初の列を除くすべての行を削除します。
その後、配列に変換し、bashで目的の数を使用できます
答え3
この記事を投稿するには遅すぎる可能性があります。
sed -nE '13,$ s/([^,]*).*lie$/\1/p' in.txt
どこ:
-nE
:-
- -n は --quiet, --silent を表します。パターンスペースを自動的に印刷しません。
- -n は --quiet, --silent を表します。パターンスペースを自動的に印刷しません。
-
-E
--regexp-extended : 拡張正規表現の使用
([^,]*)
:タイムスタンプキャプチャ.*lie$
:行が「嘘」で終わっていることを確認してください。
したがって: 行13で始まる「うそ」のタイムスタンプを返します。