【问题标题】:Piping a bash variable into awk and storing the output将 bash 变量导入 awk 并存储输出
【发布时间】:2015-11-26 00:43:03
【问题描述】:

为了说明我的问题,

TEST="Hi my name is John"
OUTP=`echo $TEST | awk '{print $3}'`
echo $OUTP

我希望这样做是将 $TEST 变量传递到 awk 并将第三个单词存储到 $OUTP。

相反,我得到“嗨:未找到”,就好像它期望输入是一个文件一样。但是,如果我只传递一个字符串而不是变量,则没有问题。解决这个问题的最佳方法是什么?

谢谢大家!

【问题讨论】:

  • 您是否使用反引号分配给 TEST。从给出错误的脚本中复制并粘贴

标签: bash awk


【解决方案1】:
#!/bin/bash
TEST="Hi my name is John"
set -- $TEST
echo $3

#!/bin/bash
TEST="Hi my name is John"
var=$(echo $TEST|awk '{print $3}')
echo $var

【讨论】:

  • 这似乎在命令提示符下工作,但是当作为 shell 脚本运行时,我仍然得到 Hi: not found。有任何解决这个问题的方法吗?谢谢!
  • 编辑:没关系,我在设置变量时在 $ 之前放置了一个额外的空格。非常感谢您的帮助!
  • 如何告诉 awk 如果字符串是名称,在它之前打印一个变量?
  • 如何处理数字? var=$( echo "(2+3)" | awk '{print $3}') => 5
  • 在堆栈溢出中,不希望只转储代码。请它需要一些编辑和进一步的解释。
【解决方案2】:

一行:

echo $(echo "Hi my name is John" | awk '{print $3}')

【讨论】:

    【解决方案3】:

    您的代码照原样适用于我。

    [bloom@little-cat-a ~]$ TEST="Hi my name is John"
    [bloom@little-cat-a ~]$ OUTP=`echo $TEST | awk '{print $3}'`
    [bloom@little-cat-a ~]$ echo $OUTP
    name
    

    【讨论】:

      【解决方案4】:

      与其他人一样,这适用于我,但也许在第 2 行的 $TEST 周围添加双引号 (") 会有所帮助。如果没有,有关您运行 bash 的系统的更具体信息可能会有所帮助。

      【讨论】:

        【解决方案5】:

        重现类似行为的一种方法:

        $ alias echo='echo;'
        $ echo Hi
        Hi: command not found
        $ alias
        alias echo='echo;'
        $ unalias echo
        $ echo Hi
        Hi
        

        【讨论】:

          猜你喜欢
          • 2021-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-09
          • 1970-01-01
          • 2019-01-25
          • 1970-01-01
          相关资源
          最近更新 更多