Awk 如何从文件中获取值并将其存储在变量中?(使用shell脚本)

Awk 如何从文件中获取值并将其存储在变量中?(使用shell脚本),awk,Awk,我有一个文件,如下所述 import org.slf4j.LoggerFactory class UpdateAvamDb { private final def DEFAULT_STALE_BACKUP_HOURS = 1.0 我想从另一个文件中读取此文件,并将DEFAULT\u STALE\u BACKUP\u HOURS之后的整数值输入变量 我读过关于awk的文章,但我不能做到,请帮助我 多谢各位 echo "import org.slf4j.LoggerFactor

我有一个文件,如下所述

import org.slf4j.LoggerFactory

class UpdateAvamDb {

        private final def DEFAULT_STALE_BACKUP_HOURS = 1.0
我想从另一个文件中读取此文件,并将
DEFAULT\u STALE\u BACKUP\u HOURS
之后的整数值输入变量

我读过关于awk的文章,但我不能做到,请帮助我

多谢各位

echo "import org.slf4j.LoggerFactory
class UpdateAvamDb {
        private final def DEFAULT_STALE_BACKUP_HOURS = 1.0" \
| awk  '/DEFAULT_STALE_BACKUP_HOUR/{print $NF}'
输出

1.0
echo“import….\\
是一种使用数据执行测试的快速方法,而不是将数据放入文件中。如果在末尾用输入文件名替换
print“…”
,awk代码块将执行相同的功能:

  awk '/..../{print $NF}' myFile
  1.0
你的标题是,将值存储在变量中,我们开始:

 myVar=$(awk '/DEFAULT_STALE_BACKUP_HOUR/{print $NF}')

 echo "myVar=$myVar"
 1.0
根据你最近的评论,不要得到所有的价值观。(我希望你只想要第一个)

一旦匹配“DEFAULT…”并打印值,我们就退出文件处理

不管怎样,
awk
正在从管道或文件中读取其输入,并询问“这一行中的任何地方是否有“DEFAULT\u STALE\u BACKUP\u HOUR”模式?" . 当它找到一行时,它将打印行上的最后一个字段,用
$NF
指定
NF
是一个变量,为读取的每一行设置,表示“字段数”。将
$
添加到前面,然后将表达式“转换”为另一个常见的awk idom,在本例中为
$6
,这意味着从当前行打印第6个字段

关于awk的一个很好的教程在

IHTH

附言。
(awk代码很简单,但很脆弱,因为您的问题非常具体。它不是一个通用的答案。我们需要看到一个更好的问题定义,以提供一个不仅仅适用于
默认值的解决方案…

您可以使用
grep
;试着在这个网站上搜索一下。有很多例子。我试过使用grep,但在使用它时遇到了一个问题,我在这个文件中有不止一行使用了“DEFAULT\u STALE\u BACKUP\u HOURS”,grep正在返回所有这些。我读了很多例子,但没有得到我想要的…所以贴了一个question@user3429026我很高兴听到这个消息。请点击绿色箭头接受我的回答,当您将鼠标“悬停”在计票点附近时,您将看到绿色箭头。祝你好运。嗨,Shelleter,早些时候我使用了相同的awk命令,但在“DEFAULT\u STALE\u BACKUP\u HOUR”之前添加了“^2”,所以我没有得到输出值。awk“/^DEFAULT\u STALE\u BACKUP\u HOUR/{print$NF}”你能解释一下原因吗在awk(和sed)中,你可以用
/matchForMe/
匹配一行输入吗。在您的示例中,您正在匹配最基本的类型,字符串。但是
/matchForMe
/可以是正则表达式(这是书长讨论的主题)。您的
^
字符是一个reg expr符号,表示“从行首开始”。请注意,我最初的解释是,
/DEF…/
将匹配行中的任何位置。现在,使用
^
字符,您可以将搜索限制为仅在该单词位于行首时匹配该单词。关于reg EXP的任何进一步问题应作为新Qs发布。祝你好运。问题大多很容易回答,你在上面的问题中做了很多。1.这是我的输入数据(小样本,足够简单,可以诊断问题,但不是一页又一页的无关内容)。2.这是我需要的输入输出。3.这是我的密码,4。这是我当前的输出。5.以下是我的想法和问题,关于为什么它不起作用。(这是为了其他读者的利益!)。祝你好运
 myVar=$(awk '/DEFAULT_STALE_BACKUP_HOUR/{print $NF;exit}')

 echo "myVar=$myVar"
 1.0