我想用awk從文本文件中查找值。該文本文件有一個非常簡單的格式:使用awk進行表格查找
文本\噸價
文本\噸價
文本\噸價
...
我想通過實際的文本,它的值應該通過shell變量查找,例如$ 1。
任何想法,我可以用awk做到這一點?
你的幫助是非常感謝。
一切順利, 阿爾貝託
我想用awk從文本文件中查找值。該文本文件有一個非常簡單的格式:使用awk進行表格查找
文本\噸價
文本\噸價
文本\噸價
...
我想通過實際的文本,它的值應該通過shell變量查找,例如$ 1。
任何想法,我可以用awk做到這一點?
你的幫助是非常感謝。
一切順利, 阿爾貝託
像這樣的事情會做的工作:
#!/bin/sh
awk -vLOOKUPVAL=$1 '$1 == LOOKUPVAL { print $2 }' < inputFile
基本上你設置傳遞到shell腳本$ 1到一個awk變量查找值,那麼你可以在awk本身中訪問它。爲了澄清,第一個$ 1是在命令行中傳入的shell腳本參數,第二個$ 1(和後續的$ 2)是輸入文件的字段1和2。
謝謝你的工作 - 除了語法的最小變化:awk'$ 1 == LOOKUPVAL {print $ 2}'LOOKUPVAL = $ 1 inputFile – user534805 2010-12-08 10:42:05
我會在shell腳本中引用$ 1:`awk -v「LOOKUPVAL = $ 1」...` – 2010-12-08 16:50:51
TEXT=`grep value file | cut -f1`
我覺得grep的實際上可能是更好的選擇:
$ echo "key value
ambiguous correct
wrong ambiguous" | grep '^ambiguous ' | awk ' { print $2 } '
的^上的圖案是匹配的行的開始,並確保你不匹配行,其中值,而比鑰匙,是所需的文字。
您可以在純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 - F'\ t'...` – 2010-12-08 16:50:12