簡體   English   中英

用sed或awk取值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM