2012-03-06 108 views
0

我有以下情况。awk使用循环时出现错误

awk '$0 != "Force for tool binder" # print all lines until string found 
$0 =="Force for tool binder"{ 
print ; getline ; print;   # go to 2 lines below the string 
getline; getline < " forceState$j.k "; print}' dynaFile_Offen1.k > tempDynaFile.k # take the string from 
#the file forceStates$j.k and replace in the main file, generating a temp file. 

问题是这里的j是一个循环索引,这意味着对于第一种情况它是j = 1。 当我用它作为forceStates1.k它工作完美,但在循环中没有采取的价值。

我将不得不提供建议。

+0

什么是错误信息? – kev 2012-03-06 15:11:58

+0

@kev这是一个逻辑错误,而不是语法错误。我的意思是说,它对这个命令没有任何作用。 – 2012-03-06 15:22:09

回答

0

$j'... " forceState$j.k " ...'将不会扩大。
这是一个问题吗?

+0

@ kev是的,我认为它没有得到扩展。 – 2012-03-06 15:33:24

+0

那么在那种情况下该怎么办?我有新的forceStates $ j.k – 2012-03-06 15:36:06

+1

每次可以传递变量通过使用'-v J = $ j'选项awk来获取值。并将''forceState $ j.k''改为''forceState“j”.k“' – kev 2012-03-06 15:39:06

0

$ j看起来是一个shell脚本变量。由于awk脚本位于单引号部分,因此shell不会在awk脚本中替换变量。所以awk看到一个文字$j。您需要更改的shell引用允许取代或可能更有效地传递在命令行如:

awk -v loopctr=$j 'BEGIN {print loopctr}' 

每次都会打印循环计数为j值在AWK变量loopctr通过了这里。