Unix 使用ARGV在awk脚本中获取用户输入

Unix 使用ARGV在awk脚本中获取用户输入,unix,awk,argv,Unix,Awk,Argv,我知道ARGV[I]可以用于存储用户输入。但是,我想在awk脚本中使用它,并获取ARGV[I]来比较另一个文本文件中的字段。如果ARGV[i]与该字段匹配,或者该字段包含作为用户输入的ARGV[i],那么我希望返回该行的其他字段。 假设我有一个文件testing.txt 123123123:Walter White:1:2:3:4 123123124:Jesse Pinkman:1:3:4:1 这是我的awk脚本,awkScript.awk #!/usr/bin/awk -f BEG

我知道ARGV[I]可以用于存储用户输入。但是,我想在awk脚本中使用它,并获取ARGV[I]来比较另一个文本文件中的字段。如果ARGV[i]与该字段匹配,或者该字段包含作为用户输入的ARGV[i],那么我希望返回该行的其他字段。 假设我有一个文件testing.txt

123123123:Walter White:1:2:3:4
123123124:Jesse Pinkman:1:3:4:1
这是我的awk脚本,awkScript.awk

 #!/usr/bin/awk -f
    BEGIN{FS = ":"; print "ENTER A NAME: "}
    {
        for (i = 1; i < ARGC; i++)
        {   
            if ($2 ~ /'ARGV[i]'/)
            {
                print "Member ID: " $1
            }
        }
    }
它只打印并输入一个名称:当我执行脚本文件时。它甚至不能从用户那里获得输入。

来自awk手册

ARGV is an array of command line arguments
这是调用awk sript时传递的参数列表

你可能想要像这样的东西

    $echo 'ENTER A NAME'
    $read Name
    Jesse Pinkman
    $awk -v name="$Name" -F: '$2=name{print $1}' filename   
    123123123
    123123124
这里-v选项在awk脚本中创建一个名为name的变量,并将$name变量的值从shell分配给name


$2=name{print$1}$2=name选择$2为name的所有行,并打印第一列

不确定您对使用ARGV[]wrt的想法,但有一种方法可以在awk中实现您想要的功能:

$ awk 'BEGIN{FS=":"; msg="ENTER A NAME:"; print msg} NR==FNR{a[$2]=$0; next} $0 in a{print a[$0]} {print msg}' file -
ENTER A NAME:
Jesse Pinkman
123123124:Jesse Pinkman:1:3:4:1
ENTER A NAME:
Walter White
123123123:Walter White:1:2:3:4
ENTER A NAME:

ARGV不能用于交互式内容。当shell将其移交给程序时,它将显示完整的命令行,也称为/proc/PID/cmdline下的内容。在您的情况下,它看起来像您的程序“Walter White”数据文件。如果您想获得用户输入,可以查看[此问题][1]。[1] :这将更适合纯*nix解决方案。