【问题标题】:AWK - Show lines where column contains a specific stringAWK - 显示列包含特定字符串的行
【发布时间】:2016-12-06 13:25:52
【问题描述】:

我有一个这样组成的文档(.txt)。

info1: info2: info3: info4

我想按列显示一些信息。 例如,我在“info3”屏蔽中有一些不同的信息,我只想在“info3”列中看到由“test”组成的行。

我想我必须使用排序,但我不确定。 有什么想法吗?

【问题讨论】:

  • 所以你有一堆冒号分隔的值,你想只看到第三列中有'test'的行?
  • 是的,这就是我想要的!
  • 提供带有示例数据的实际输入文件会很有用。

标签: linux bash sorting awk


【解决方案1】:

前面的答案假设第三列完全等于test。看起来您正在寻找值包含测试的列。我们需要使用awk的match函数

awk -F: 'match($3, "test")' file

【讨论】:

    【解决方案2】:

    您可以为此使用awk。假设您的列由 : 分隔,并且第 3 列的条目具有 test,则下面的命令仅列出具有该值的那些行。

    awk -F':' '$3=="test"' input-file
    

    【讨论】:

      【解决方案3】:

      假设间距是一致的,并且您在第三列中只查找test,请使用

      grep ".*:.*: test:.*" file.txt
      

      或者处理可能出现的任何间距

      grep ".*:.*: *test *:.*" file.txt
      

      【讨论】:

      • 好的,那么“排序”在这种情况下没用吗?感谢您的帮助,但我使用了“sort –k3n,3n”,这样不好吗?
      • 如果我认为你正在尝试这样做,它只是按第三列排序。这可能是您想要的,但不会只给您test 的行。
      • 好的,它工作得很好,但如果我想排除信息,grep 也可以工作?例如,如果我想在第三列显示所有不是由“test”组成的行?我认为这是相同的过程,但我不确定。
      • 使用grep -v ... 仅显示不匹配的内容。
      • 也许我的问题表述不当。例如我有: info1: info2: test1: info4 info1: info2: test2: info4 info1: info2: test1: info4 我想显示所有不是“test2”的行。
      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多