10

有没有办法通过 awk 编程读取用户输入?我尝试编写一个脚本来读取包含学生姓名和 ID 的文件。我必须通过键盘从用户那里获取学生的姓名,并使用 awk 返回所有学生的结果。

4

3 回答 3

19

getline您可以使用该功能收集用户输入。确保在BEGIN块中设置它。以下是 的内容script.awk

BEGIN {
    printf "Enter the student's name: "
    getline name < "-"
}

$2 == name {
    print
}

这是一个包含 ID、名称和结果的示例文件:

1 jonathan good
2 jane bad
3 steve evil
4 mike nice

像这样运行:

awk -f ./script.awk file.txt
于 2012-10-16T03:53:26.173 回答
7

假设输入文件的格式为:

name<tab>id

对,并且您想打印文件中名称与用户输入匹配的行,请尝试以下操作:

awk '
BEGIN { FS=OFS="\t"; printf "Enter name: " }
NR == FNR { name = $0; next }
$1 == name
' - file

或者使用 GNU awk,您可以使用 nextfile,这样您就不必在输入后输入 control-D:

awk '
BEGIN { FS=OFS="\t"; printf "Enter name: " }
NR == FNR { name = $0; nextfile }
$1 == name
' - file

如果这不是您想要做的,请发布一些示例输入和预期输出。

于 2012-10-16T04:02:59.380 回答
2

我已经用线测试过

"awk 'BEGIN{printf "enter:";getline name<"/dev/tty"} {print $0} END{printf "[%s]", name}' < /etc/passwd" 

对我来说是更好的解决方案和更具可读性。

于 2013-04-22T15:57:23.647 回答