2010-06-15 79 views
1

我试图从文件中提取nth + 1nth + 3列。如何将变量传递给awk打印参数

这是尝试,这是一个有用的伪代码:

for i in {1..100} ; do awk -F "," " { printf \"%3d, %12.3f, %12.3f\\n\", \$1, \$($i+1), \$($i+3) } " All_Runs.csv > Run-$i.csv 

其中,显然是行不通的(但它似乎合理的希望)。

我该怎么做?

回答

1

你能避免有些发毛引号和转义通过用awk做递增:

awk -F "," 'BEGIN { i = j = 1 } { i++; j+=3; printf "%3d, %12.3f, %12.3f\n", $1, $i, $j > Run-$i.csv }' All_Runs.csv 

或使用awk的变量传递功能:

for i in {1..100}; do awk -F "," -v i=$i '{ i++; j=i+2; printf "%3d, %12.3f, %12.3f\n", $1, $i, $j }' All_Runs.csv > Run-$i.csv; done 

(均未经测试)

+0

看起来像第二个需要'我=我'→'我= $我'? – 2010-06-15 19:14:42

+0

@克里斯:谢谢。 – 2010-06-15 19:41:03

0

等一下,如果我输入正确的命令它的工作...

for i in {1..2} ; do awk -F "," " { printf \"%3d %12.3f %12.3f\\n\", \$1, \$($i+1), \$($i+3) } " All_Runs.csv ; done 

失踪的; done。卫生署!

相关问题