【问题标题】:Trying to use awk to print a column but says print not found尝试使用 awk 打印列,但显示未找到打印
【发布时间】:2015-06-19 22:54:38
【问题描述】:

所以我正在尝试做一些功课并且遇到了很多问题。这是我在 UNIX/Linux 中编写的第一个脚本。现在我正在尝试从 free 命令中打印出几列,并使用 awk 来获取我需要的那些列。每次我尝试这样做时,我都会得到一个 bash: print command not found。

我正在尝试使用的命令:

free | awk `{print $3}`

我也尝试过不使用 {}。

所以当它完成时,我想说例如:总可用内存:xx MB 用 xx 填充当然是结果。

感谢任何帮助。谢谢。

更新: 好的,所以不要使用反引号来让它工作。所以现在我希望整个命令最终说: 总可用内存:xx MB

我目前的命令是:

echo "Current Free Memory: " | free -m | awk '{print $3}'

我只想要那一列行交叉点。

【问题讨论】:

    标签: linux bash awk


    【解决方案1】:

    你在说

    free | awk `{print $3}`
    

    而你需要说awk '{...}'。也就是说,使用单引号而不是反引号:

    free | awk '{print $3}'
               ^          ^
    

    请注意,man awk 对此进行了解释:

    语法

      awk <options> 'Program' Input-File1 Input-File2 ...
    
      awk -f PROGRAM-FILE <options> Input-File1 Input-File2 ...
    

    【讨论】:

    • 啊哈...谢谢。我们的教授一直在谈论使用反引号,我想我很困惑。
    • 那么我如何从输出中只得到一行。喜欢一列一行?
    • 更好地更新您的问题,显示您到底想做什么。
    • 而是发布一个新问题,因为询问如何打印特定行与此问题中询问的反引号问题无关。
    • 好的,我会在这个问题之后发布一个新问题。我刚刚更新了它,希望能更好地解释最后一部分。
    【解决方案2】:

    你应该去第 4 场。 我建议使用 awk 和 sed,但这取决于你。

    这是我的建议:

    freem="$(free -m | awk '{print $4}' | sed -n '2p')"
    
    echo "Total Free Memory: $freem MB"
    

    其中 $4 是您想要的列,2p 是您想要的行。

    在编写脚本之前,请在命令行中检查您的结果。

    【讨论】:

    • 这是一种效率极低的做事方式。不需要将 awk 传递给 sed,因为 awk 可以单独处理它。
    • @fedorqui 你是对的,但我给了他许多其他可能的解决方案之一。他甚至可以使用 cut.... 它始终取决于您的需要。请随时分享您的建议
    • 只要 awk 'NR==2 {print $4}'
    【解决方案3】:
    free -m | awk '/Mem:/ {print "Current Free Memory: " $4 " MB"}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2011-04-26
      • 1970-01-01
      相关资源
      最近更新 更多