如何将变量传递给awk打印参数

时间:2010-06-15 18:37:15

标签: bash awk

我正在尝试从文件中提取nth + 1nth + 3列。

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

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

这显然不起作用(但希望似乎是合理的)。

我该怎么做?

2 个答案:

答案 0 :(得分: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

(均未经测试)

答案 1 :(得分: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。卫生署!