在awk中获取用户输入

fem*_*chi 7 awk

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

Ste*_*eve 16

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

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

$2 == name {
    print
}
Run Code Online (Sandbox Code Playgroud)

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

1 jonathan good
2 jane bad
3 steve evil
4 mike nice
Run Code Online (Sandbox Code Playgroud)

运行如下:

awk -f ./script.awk file.txt
Run Code Online (Sandbox Code Playgroud)


Ed *_*ton 7

假设输入文件格式为:

name<tab>id
Run Code Online (Sandbox Code Playgroud)

对,你想打印文件中的名称与用户输入匹配的行,试试这个:

awk '
BEGIN { FS=OFS="\t"; printf "Enter name: " }
NR == FNR { name = $0; next }
$1 == name
' - file
Run Code Online (Sandbox Code Playgroud)

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

awk '
BEGIN { FS=OFS="\t"; printf "Enter name: " }
NR == FNR { name = $0; nextfile }
$1 == name
' - file
Run Code Online (Sandbox Code Playgroud)

发布一些样本输入和预期输出,如果这不是你想要做的.

  • +1 nextfile ...我总是可以通过阅读你的答案来学习东西.尽管所有的东西都在man page中.您只是通过实际例子给出了很好的解释.让它们易于被记住.谢谢. (3认同)