【问题标题】:utilizing a variable in awk then enter output into another variable在 awk 中使用一个变量,然后将输出输入到另一个变量中
【发布时间】:2015-12-13 16:43:24
【问题描述】:
#!/bin/bash

cat /home/user/list
read -p "enter a number: " LISTNUMBER
USERNAME=$(awk '$LISTNUMBER {
  match($0, $LISTNUMBER); print substr($0, RLENGTH + 2); }' /home/user/list)

echo "you chose $USERNAME."

此脚本将使用 awk 搜索另一个包含数字和用户名列表的文件: 1个鲍勃 2 弗雷德 ETC... 我只想要用户名而不是相应的数字,这就是我尝试使用的原因:print substr($0, RLENGTH + 2)

很遗憾,awk 的输出不会附加到 $USERNAME。

我已为此尝试grep,但无法获得答案。然后我读到了awk 并到了这里,但又被卡住了。使用grep 或awk 对我来说都是一样的。

【问题讨论】:

标签: bash shell awk


【解决方案1】:
在类似 POSIX 的 shell 中,

单引号的字符串总是文字 - 不对其内容进行插值。因此,您的代码中的$LISTNUMBER 将不会扩展为它的值。

要将 shell 变量传递给 Awk,请使用 -v {awkVarName}="${shellVarName}"。

此外,Awk 执行将输入行自动拆分为逐行空格的字段(默认情况下); $1 代表第一个字段,$2 第二个,...

如果我们将这两种见解应用于您的场景,我们会得到:

#!/bin/bash

read -p "enter a number: " LISTNUMBER
USERNAME=$(awk -v LISTNUMBER="$LISTNUMBER" '
  $1 == LISTNUMBER { print $2 }' /home/user/list)

echo "you chose $USERNAME."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多