2009-09-13 110 views
0

我想要做類似的東西:使用GAWK在shell腳本

for i in 1 2 3 
do 
    gawk '{if ($i==$2) {print $0;}}' filename 
done 

這可能嗎?

謝謝

回答

0

兩種可能的解釋浮現在腦海中:

  1. 你真的要搜索「1」,「2」,然後選擇「3」作爲第二個字段filename
  2. 實際上,你要搜索第1'shell腳本參數,那麼第二個,...

這裏是循環的兩個版本:

for i in 1 2 3; do 
    gawk "{if (\"$i\"==\$2) {print \$0;}}" filename 
done 
for i in "[email protected]"; do 
    gawk "{if (\"$i\"==\$2) {print \$0;}}" filename 
done 
+0

「1 2 3」只是爲了感受。他們可能是「我在'a''b''c'」等等。所以選項1就是我一直在尋找的東西 – Guy 2009-09-13 22:00:10

0

確定,這是可能的,但它可能不會做你想做的事情。

...想起來吧,做什麼你想要它做什麼?從你寫的內容來看,這並不是很清楚。您可能必須更改的一件事是用雙引號替換單引號,因爲變量(如$i)不會被替換爲單引號字符串。

+0

另外,'$ 2'將引用正在處理的行中的第二個字段 - 可能不是所需的行爲。 – 2009-09-13 21:34:37

1

假設你想要的GAWK腳本是

 
{if ($1 == $2) ... } 
{if ($2 == $2) ... } 
{if ($3 == $2) ... } 

,你可以這樣做:你的腳本

 
for i in 1 2 3 
do 
    gawk '{if ($'$i'==$2) {print $0;}}' filename 
done 
3

爲了避免難看報價,您可以使用gawk的變量傳遞功能:

for i in 1 2 3 
do 
    gawk -v param=$i '{if (param==$2) {print $0}}' filename 
done