2010-06-15 3 views
1

Я пытаюсь извлечь столбцы nth + 1 и nth + 3 из файла.Как передать переменную параметру awk print

Это то, что пытался, который является полезным псевдо-код:

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

Похоже, второй нужен «i = i' →' i = $ i'? –

+0

@ Крис: Спасибо. –

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. Doh!

Смежные вопросы