在awk中获取用户输入

时间:2012-10-16 03:44:06

标签: awk

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

3 个答案:

答案 0 :(得分:15)

您可以使用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

答案 1 :(得分: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

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

答案 2 :(得分:1)

&#39;用线

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

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