从文本文件中提取属性值

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】:

您能否尝试使用awkmatch 函数来关注。

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 字段值)

从文本文件中提取结构化数据(awk?):缺少的字段必须获得默认值

从文本文件中提取不均匀的数据

如何将文本从文本文件转换为具有词频值的库键?

从Powershell中的文本文件中输入值