【问题标题】:Can awk help detect sequence in a file?awk 可以帮助检测文件中的序列吗?
【发布时间】:2014-02-21 18:38:04
【问题描述】:

好的,这对 Pro 来说很简单;然而到目前为止,我一直没有找到答案......

我的文件内容包含逗号分隔的值,我需要从中提取一个数字。我的问题是周围值的顺序对于返回正确的数字很重要。

示例文件内容:

car, 00, tar
foo, 01, bar
bar, 02, foo
foo, 04, car

也许使用 awk 或 sed,根据 foo 出现在该行中的 bar 之前的事实,帮助我将变量 var 分配给 01。将它分配给 02 是错误的,因为 bar 出现在 foo 之前。

如果这是重复的,请提前道歉......我确实在网上搜索过这里和其他几个地方;提前致谢!此外,我仍在尝试使用各种代码和标签参数来获得正确的格式。

【问题讨论】:

  • 考虑编辑您的问题以包含最少的样本数据,以说明应该处理的案例与未处理的案例,然后显示该输入的预期输出。请注意编辑框顶部的{} 工具来格式化所选文本以提高可读性。祝你好运。

标签: sed awk grep


【解决方案1】:

不确定我是否遵循您的问题,但可以使用awk 轻松完成搜索模式和返回特定列值。

您可以尝试以下想法:

$ cat file
car, 00, tar
foo, 01, bar
bar, 02, foo

$ var=$(awk -F', ' '$1=="foo"{print $2}' file)

$ echo "$var"
01

【讨论】:

  • 啊,不错!我需要同时检测 foo 和 bar 的存在,并且在将 var 分配给 01 之前按该顺序检测。例如,如果文件包含行:foo, 04, car 那么它不会返回 04,而只会返回 01。感觉?
  • @user3338443 当然可以var=$(awk -F', ' '$1=="foo" && $3=="bar" {print $2}' file)
  • 太棒了。这就像一个魅力。谢谢@jaypal !!
猜你喜欢
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2010-11-15
  • 2014-05-23
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
相关资源
最近更新 更多