【问题标题】:How can I get the values from this file?如何从此文件中获取值?
【发布时间】:2021-03-18 00:27:27
【问题描述】:

如何从这个文件中获取值?

[myfile.file]
documentation            My Documentation
test                     testvalue
test for my var          123
test_var2                this is my second var
test_bool                false

例如,我想获取键“test for my var”的值“123”或键“test_var2”的值“this is my second var”。键和值之间(在文件中)有很多空格。在我的 bash 变量中,我只想拥有没有这些空格的值。

我目前的方法行不通。

#!/bin/bash
value=$(cat /tmp/myfile.file | grep '^test:' | awk '{print $2}')

【问题讨论】:

  • 您的方法无效,因为您搜索了不在文件中的:
  • 你的分隔符是什么?还是文件宽度固定?
  • 当我使用 '^test' 时,我会在键以 test 开头的地方取回所有值。
  • 使用分隔符(\t 或固定 (?) 数量的空格)Paul Hodges 要求您指定?

标签: bash awk grep


【解决方案1】:

您可以使用此awk 将字段拆分为 2+ 个空格:

awk -v s='test for my var' -F '[[:blank:]]{2,}' '$1 == s {print $2}' file
123

awk -v s='test_var2' -F '[[:blank:]]{2,}' '$1 == s {print $2}' file
this is my second var

【讨论】:

  • 这适用于 gawk (GNU awk)。我的发行版带有不同版本的 awk。这同样适用于您。
  • 没有特定的gnu。这也适用于我的 mac (BSD) awk
  • 在 FS 中使用 {2,} 正则表达式语法不适用于 mawk(Debian 现在附带它 afaik)
  • 我无权访问mawk,但 POSIX awk 可以正常使用上述模式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2022-10-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多