【问题标题】:get the user input in awk在 awk 中获取用户输入
【发布时间】:2013-04-23 00:17:55
【问题描述】:

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

【问题讨论】:

    标签: awk


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      假设输入文件的格式为:

      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
      

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

      【讨论】:

      • +1 nextfile... 我总是可以通过阅读您的答案来学习东西。即使所有东西都在手册页中。你只是用实际的例子给出了很好的解释..让它们很容易被记住。谢谢。
      【解决方案3】:

      我用线测试过

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

      对我来说是更好的解决方案,更易读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 2010-11-10
        • 2011-07-14
        • 2011-12-18
        • 1970-01-01
        相关资源
        最近更新 更多