使用awk进行表查找

use*_*805 4 awk

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

text\t value
text\t value
text\t value
...

我想通过为其值应通过shell变量中查找的实际文本,例如,$ 1.

有什么想法我怎么能用awk做到这一点?

非常感谢你的帮助.

一切顺利,Alberto

Chr*_*s J 5

像这样的东西可以完成这项工作:

#!/bin/sh
awk -vLOOKUPVAL=$1 '$1 == LOOKUPVAL { print $2 }' < inputFile
Run Code Online (Sandbox Code Playgroud)

基本上,您将传递到$ 1的shell脚本中的查找值设置为awk变量,然后您可以在awk中访问它.为了澄清,第一个$ 1是在命令行传递的shell脚本参数,第二个$ 1(和后续的$ 2)是输入文件的字段1和2.


Pau*_*ce. 5

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

#!/usr/bin/awk -f
BEGIN { key = ARGV[1]; ARGV[1]="" }
$1 == key { print $2 }
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

./lookup.awk keyval lookupfile
Run Code Online (Sandbox Code Playgroud)

例:

$ cat lookupfile
aaa     111
bbb     222
ccc     333
ddd     444
zzz     999
mmm     888
$ ./lookup.awk ddd lookupfile
444
$ ./lookup.awk zzz lookupfile
999
Run Code Online (Sandbox Code Playgroud)

这甚至可以扩展为使用参数选择所需的字段.

#!/usr/bin/awk -f
BEGIN { key = ARGV[1]; field = ARGV[2]; ARGV[1]=ARGV[2]="" }
$1 == key { print $field }
Run Code Online (Sandbox Code Playgroud)

例:

$ 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
Run Code Online (Sandbox Code Playgroud)