【发布时间】:2013-04-23 00:17:55
【问题描述】:
有没有办法通过 awk 编程读取用户输入? 我尝试编写一个脚本来读取包含学生姓名和 ID 的文件。 我必须通过键盘从用户那里获取学生的姓名,并使用 awk 返回所有学生的结果。
【问题讨论】:
标签: awk
有没有办法通过 awk 编程读取用户输入? 我尝试编写一个脚本来读取包含学生姓名和 ID 的文件。 我必须通过键盘从用户那里获取学生的姓名,并使用 awk 返回所有学生的结果。
【问题讨论】:
标签: awk
您可以使用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
【讨论】:
假设输入文件的格式为:
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
如果您不想这样做,请发布一些示例输入和预期输出。
【讨论】:
我用线测试过
"awk 'BEGIN{printf "enter:";getline name<"/dev/tty"} {print $0} END{printf "[%s]", name}' < /etc/passwd"
对我来说是更好的解决方案,更易读。
【讨论】: