AWK:有条件地抓取文件中的文本

时间:2012-02-12 16:11:23

标签: file awk gawk

我需要在文件中找到一个具有id(比如valueID1)且小于某个值的值。从那里,我需要找到与valueID1相关但具有不同值id的第一个值,并且位于不同的行(比如valueID2)

说我想在名为“birthday”的文件中找到一个id,例如birthday = xx / xx / xxxx我想找到特定日期以下的第一个生日(我必须用3美元来抢实际的数值)然后,我想要获取第一个附近的第二个id的值,所以“name”就像“name = Greg”。我想在那里输出'Greg'。我只想要第一个结果,而不是所有结果都小于第一个指定值。

有关如何做到这一点的任何想法?这就是我所能做到的,而且根本不起作用。

{
 if((/valueID1/ $3) < 0.1) print /valueID2/ $3; else
       /valueID2/
}

1 个答案:

答案 0 :(得分:1)

以下是我从您的描述中理解的内容,您的数据可能如下所示:

Birthday = 2011
Name = Anna
Birthday = 1987
Name = George

在这种情况下,你想打印出“George”,因为他的生日不到1999年。如果这些假设是正确的,我就是这样解决的:

awk '$1=="Birthday"{birthday = $3} $1=="Name" && birthday<1999 {print $3}' birthday.txt

讨论

  • 我假设您的数据文件名为birthday.txt
  • 第一部分 $ 1 ==“生日”{birthday = $ 3} 将生日字段保存到变量生日
  • 接下来,如果该行包含“姓名”,我们会检查我们保存的生日并打印

更新

如果年份始终是最后一个字段,则以下内容将起作用。如果仍然无法正常工作,请提供输入数据和预期输出。当我不完全理解这个问题时,很难给出准确的结果。祝你好运。

awk '/BirthdayYear/{birthday=$NF} $1=="Name" && birthday<1999 {print $3}' birthday.txt