【问题标题】:Why result from awk seems not working为什么 awk 的结果似乎不起作用
【发布时间】:2016-08-31 11:48:48
【问题描述】:

我有一个如下所示的测试数据文件

PAT1 3 - 第一个块 4 PAT2 PAT3 7 - 第二块 PAT4 PAT5 10 - 第三块 PAT6 PAT7 12 - 第四块

如果我从 shell 运行以下命令行来查找 PAT1 和 PAT5 之间的行,包括包含两个字符串的行,它在 shell 提示符下工作得很好。

awk '/PAT1/, /PAT5/ ' 测试文件

结果如下:

PAT1 3 - 第一个块 4 PAT2 PAT3 7 - 第二块 PAT4 PAT5

但是如果我想在 shell 脚本文件中执行这个 awk 命令行,它就不再起作用了,而且 results.txt 文件中没有任何内容。

#!/bin/sh

Data="PAT1"             
Data2="PAT2"                                    

echo "$Data, $Data2"
awk '/$Data/, /$Data2/' test_file > results.txt

我认为 awk 代码的语法在 shell 脚本中是错误的。我试图阅读页面 link,但我无法快速弄清楚我的 shell 脚本中的 awk 代码有什么问题。

【问题讨论】:

    标签: shell awk


    【解决方案1】:

    awk 看到的是文字文本 $Data$Data2 而不是插值。对于这种情况,您可以(可能)只使用双引号:

    awk "/$Data/,/$Data2/" test_file > results.txt
    

    如果 Data 或 Data2 包含 /,这将失败,因此您需要:

    awk 'match($0, data), match($0, data2)' data="$Data" data2="$Data2" test_file > results.txt
    

    【讨论】:

    • 你是对的。双引号 " 解决了我的问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2010-10-14
    • 2022-11-13
    • 2012-10-19
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多