我知道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:当我执行脚本文件时。它甚至没有得到用户的输入。
答案 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
选择$2
为name
的所有行并打印第一列
答案 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: