2010-06-15 50 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。衛生署!