有没有办法通过awk编程读取用户输入? 我尝试编写脚本来读取包含学生姓名和ID的文件。 我必须通过键盘从用户那里得到学生的名字,并使用awk返回所有学生的成绩。
答案 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"
对我来说是更好的解决方案,更具可读性。