[英]Take values with sed or awk
在日志文件中,我在表單上有一行
2014-10-09 13:03:01.095@LM_TRACE@ [Functions::setRotate(float, float, float)] 3D, H:359.08847, P:0.24604176, R:0
如何使用sed
(或awk
或其他)來檢索三個浮點值H, P, R
? 我需要將它們存儲在.csv文件中。
試試這個“快速又臟”的方法:
awk -F' H:| P:| R:' '{$1=""}7' file
輸出:
359.08847, 0.24604176, 0
您可以通過grep輕松完成此操作,
$ grep -oP '(H|P|R):(\d+(\.\d+)?)' file
H:359.08847
P:0.24604176
R:0
要么
$ sed 's/.*H:\([0-9.]*\), *P:\([0-9.]*\), *R:\([0-9.]*\)$/\1, \2, \3/' file
359.08847, 0.24604176, 0
使用sed時,將如下所示:
sed 's|.*H:\(.*\), P:\(.*\), R:\(.*\)|\1, \2, \3|' infile.txt > outfile.csv
使用-n
不顯示不匹配的行,並使用p
打印不匹配的行。 例如:
sed -n 's|.*H:\(.*\), P:\(.*\), R:\(.*\)|\1, \2, \3|p' infile.txt > outfile.csv
您可以使用以下awk:
awk -F '[HPR]:' -v OFS=', ' '{gsub(/ *, */, ""); print $2, $3, $4}' file
359.08847, 0.24604176, 0
您可以使用以下KSH
腳本,例如
the_script < logfile
#!/bin/ksh
read line
line=${line#*\(}
line=${line%\)*}
line=${line//,/}
print ${line} | read R1 R2 R3
print "result: $R1;$R2;$R3"
#!/usr/bin/sh
while read line
do
echo "$line" | sed 's/.* H:\(.*\) P:\(.*\) R:\(.*\)/\1 \2 \3/'
| awk '{print $1 $2 $3}' >> file.csv
done < log.txt
這個也可以
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.