2010-12-08 64 views
4

我想用awk從文本文件中查找值。該文本文件有一個非常簡單的格式:使用awk進行表格查找

文本\噸價
文本\噸價
文本\噸價
...

我想通過實際的文本,它的值應該通過shell變量查找,例如$ 1。

任何想法,我可以用awk做到這一點?

你的幫助是非常感謝。

一切順利, 阿爾貝託

+0

注意,如果標籤是明確的字段分隔符,如果你的任何字段都可以包含空格,你必須指定標籤作爲字段分隔符:`AWK - F'\ t'...` – 2010-12-08 16:50:12

回答

4

像這樣的事情會做的工作:

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

基本上你設置傳遞到shell腳本$ 1到一個awk變量查找值,那麼你可以在awk本身中訪問它。爲了澄清,第一個$ 1是在命令行中傳入的shell腳本參數,第二個$ 1(和後續的$ 2)是輸入文件的字段1和2。

+0

謝謝你的工作 - 除了語法的最小變化:awk'$ 1 == LOOKUPVAL {print $ 2}'LOOKUPVAL = $ 1 inputFile – user534805 2010-12-08 10:42:05

+0

我會在shell腳本中引用$ 1:`awk -v「LOOKUPVAL = $ 1」...` – 2010-12-08 16:50:51

0
TEXT=`grep value file | cut -f1` 
0

我覺得grep的實際上可能是更好的選擇:

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

的^上的圖案是匹配的行的開始,並確保你不匹配行,其中值,而比鑰匙,是所需的文字。

4

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