使用awk进行表查找

时间:2010-12-08 09:59:30

标签: awk

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

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

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

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

非常感谢您的帮助。

一切顺利, 阿尔贝托

4 个答案:

答案 0 :(得分:5)

这样的事情可以胜任:

#!/bin/sh
awk -vLOOKUPVAL=$1 '$1 == LOOKUPVAL { print $2 }' < inputFile

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

答案 1 :(得分:5)

您可以在没有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

答案 2 :(得分:0)

TEXT=`grep value file | cut -f1`

答案 3 :(得分:0)

我认为grep实际上可能更合适:

$ echo "key value
ambiguous correct
wrong ambiguous" | grep '^ambiguous ' | awk ' { print $2 } '

模式上的^与行的开头匹配,并确保您不匹配值而不是键是所需文本的行。