2016-04-03 61 views
0

我想通過u_test字符串旁邊的字段,其中FS爲,,並且還不是以#開頭的系統命令(在本例中爲grep),以查找包含FS top.v文件中的字符串。使用在awk命令中獲得的字段grep

BEGIN{FS=","} 

{ 
    if($0 !~ /^#/){ 
     for(i=1;i<=NF;i++){ 
      if($i ~ /u_test/){ 
       a=$(i+1); 
       cmd = "grep '\$(i+1)' top.v"; 
       printf("%s\n",a); 
       system(cmd); 
      } 
     } 
    } 
} 

上面的代碼似乎不起作用。

+0

你能舉一個例子輸入以及你努力實現的事情的描述(即示例輸出)? – Derlin

+0

假設這個腳本的輸入包含記錄爲u_test,abcd,pqrs,wyxc ...我想提取'abcd',它緊挨着u_test字段,並且grep這個字符串在另一個文件中top.v –

+1

您需要向我們展示*確切*輸入和*精確*預期輸出。請[編輯]您的問題以更新它與這些細節。 – tripleee

回答

0

問題來自您構建cmd字符串的方式。事實上:

cmd = "grep '\$(i+1)' top.v"; 
print cmd; 

給你grep '$(i+1)' top.v,因此\$被視爲一個普通的$而不是由awk的變量替換。

所以,相反,使用方法:

cmd = "grep '"$(i+1)"' top.v"; 

或者乾脆:

cmd = "grep '"a"' top.v"; 

另外,我建議你使用一個真正的AWK條件,而不是if

$0 !~ /^\#/ { # replaces the if 
    # your code with the for loop 
} 

爲了它的樂趣,她e是使用sedxargs做一個班輪相同:

cat ex.txt | sed 's/^#.*//' | sed -n 's/.*u_test,\([^,]*\).*$/\1/p' | xargs -I{} grep {} top.v