私の GPS ロガーは時折、ログ ファイルの最後に「未完成」の行を残します。最後までだと思いますが、念のため全行確認したいと思います。
サンプルの完全な文は次のようになります。
$GPRMC,005727.000,A,3751.9418,S,14502.2569,E,0.00,339.17,210808,,,A*76
$
行は記号で始まり*
、2 文字の 16 進チェックサムで終わる必要があります。チェックサムが正しいかどうかは気にしません。存在するだけです。チェックサムがなく、すべてのファイルの先頭にある「ADVER」文も無視する必要があります。
次の Python コードが機能する可能性があります。
import re
from path import path
nmea = re.compile("^\$.+\*[0-9A-F]{2}$")
for log in path("gpslogs").files("*.log"):
for line in log.lines():
if not nmea.match(line) and not "ADVER" in line:
print "%s\n\t%s\n" % (log, line)
grep
またはawk
何か簡単なものでそれを行う方法はありますか?grep
どうすれば自分のやりたいことができるようになるのか、まったくわかりません。
更新: @Motti と @Paul に感謝します。次のようにして、ほぼやりたいことを実行できましたが、機能する$
前に一重引用符を使用して末尾を削除する必要がありました。
grep -nvE '^\$.*\*[0-9A-F]{2}' *.log | grep -v ADVER | grep -v ADPMB
さらに 2 つの疑問が生じます。空白行を無視するにはどうすればよいですか? そして、最後の 2 つの s を組み合わせることができgrep
ますか?