awk - 使用 awk 进行表查找

标签 awk

我想使用 awk 从文本文件中查找值。文本文件的格式非常简单:

文本\t 值
文本\t 值
文本\t 值
...

我想传递应该通过 shell 变量查找值的实际文本,例如 $1。

有什么想法可以用 awk 做到这一点吗?

非常感谢您的帮助。

祝一切顺利,
阿尔贝托

最佳答案

您可以在没有 shell 包装器的纯 AWK 脚本中执行此操作:

#!/usr/bin/awk -f
BEGIN { key = ARGV[1]; ARGV[1]="" }
$1 == key { print $2 }

像这样调用它:
./lookup.awk keyval lookupfile

例子:
$ cat lookupfile
aaa     111
bbb     222
ccc     333
ddd     444
zzz     999
mmm     888
$ ./lookup.awk ddd lookupfile
444
$ ./lookup.awk zzz lookupfile
999

这甚至可以扩展为使用参数选择所需的字段。
#!/usr/bin/awk -f
BEGIN { key = ARGV[1]; field = ARGV[2]; ARGV[1]=ARGV[2]="" }
$1 == key { print $field }

例子:
$ cat lookupfile2
aaa     111     abc
bbb     222     def
ccc     333     ghi
ddd     444     jkl
zzz     999     mno
mmm     888     pqr
$ ./lookupf.awk mmm 1 lookupfile2
mmm
$ ./lookupf.awk mmm 2 lookupfile2
888
$ ./lookupf.awk mmm 3 lookupfile2
pqr

关于awk - 使用 awk 进行表查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386185/

相关文章:

bash - 是否有一个函数可以让我在文本文件中的一组行的开头添加一个字符串?

linux - 如何在linux中使用sed命令在word中添加和替换字符

linux - 如果特定字符串在 bash 中使用 sed 在模式之间匹配,则在前后添加字符串

regex - gawk 到 awk 中的区间表达式

perl - 命令截断文件中带引号的字符串?

regex - 如何使用 UNIX 命令将整数更改为 float

regex - 使用 awk 查找和替换通过 find 找到的文件中的字符串

perl - 哪个作业在哪个节点上运行?

linux - 以最智能的方式处理 CSV 文件

bash - 根据子字段值删除复合字段