gpt4 book ai didi

bash - 在 awk 中使用一个变量,然后将输出输入到另一个变量中

转载 作者:行者123 更新时间:2023-11-29 09:25:42 26 4
gpt4 key购买 nike

#!/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 的内容并来到这里,但又被卡住了。使用 grepawk 对我来说都是一样的。

最佳答案

- 类 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."

关于bash - 在 awk 中使用一个变量,然后将输出输入到另一个变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com