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