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

时间:2014-10-19 08:34:20

标签: 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
    BEGIN{FS = ":"; print "ENTER A NAME: "}
    {
        for (i = 1; i < ARGC; i++)
        {   
            if ($2 ~ /'ARGV[i]'/)
            {
                print "Member ID: " $1
            }
        }
    }

它只打印ENTER A NAME:当我执行脚本文件时。它甚至没有得到用户的输入。

2 个答案:

答案 0 :(得分:0)

来自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赋予名称

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

答案 1 :(得分:0)

不确定您是否正在考虑使用ARGV [],但这里有一种方法可以在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: