从文本文件中提取属性值
Posted
技术标签:
【中文标题】从文本文件中提取属性值【英文标题】:Extract a property value from a text file 【发布时间】:2020-12-27 22:48:05 【问题描述】:我有一个日志文件,其中包含如下行:
Internal (reserved=1728469KB, committed=1728469KB)
我需要提取“已提交”中包含的值,所以 1728469 我正在尝试为此使用 awk
cat file.txt | awk 'print $4'
然而这会产生:
committed=1728469KB)
这仍然不完整,还需要一些工作。有没有更简单的解决方案来代替? 谢谢
【问题讨论】:
awk -F= 'sub(/[)]/,"",$3); print $3
可能会有所帮助。祝你好运
另见:***.com/questions/3070141/…, ***.com/questions/5080988/…
【参考方案1】:
$ awk -F'[=)]' 'print $3' file
1728469KB
【讨论】:
【参考方案2】:您能否尝试使用awk
的match
函数来关注。
awk 'match($0,/committed=[0-9]+/)print substr($0,RSTART+10,RLENGTH-10)' Input_file
使用 GNU grep
使用它的 \K
选项:
grep -oP '.*committed=\K[0-9]*' Input_file
上述两种解决方案的输出均为1728469
。
第一种解决方案说明:
awk ' ##Starting awk program from here.
match($0,/committed=[0-9]+/) ##Using match function to match from committed= till digits in current line.
print substr($0,RSTART+10,RLENGTH-10) ##Printing sub string from RSTART+10 to RLENGTH-10 in current line.
' Input_file ##Mentioning Input_file name here.
【讨论】:
【参考方案3】:你可以试试这个:
str="Internal (reserved=1728469KB, committed=1728469KB)"
echo $str | awk 'print $3' | cut -d "=" -f2 | rev | cut -c4- | rev
【讨论】:
【参考方案4】:Sed 更擅长简单的匹配任务:
sed -n 's/.*committed=\([0-9]*\).*/\1/p' input_file
【讨论】:
以上是关于从文本文件中提取属性值的主要内容,如果未能解决你的问题,请参考以下文章
从 JSON 文件中提取字段,将其与纯文本文件匹配值进行比较,并从 JSON 文件中提取特定字段
用于从文本日志文件中提取/检索值的 Shell 脚本(sqlcode 字段值)