2011-05-05 7 views
1

мне нужна коррекция в моем синтаксисе оболочки (ниже)Shell Scripting ---- Коррекция нужна

cat $dfn | gawk 
'{for (i = 1; i <= NF; i += 1) 
{printf "%f\t", ((($i/$tag)/$bn) */ 1000000000);} 
printf "\n"}'>fn 

где $dfn это имя файла $tag и $bn удерживать значение. и fn - файл, в который направляется выход.

Примечание: что делает эта строка, требуется имя файла (которое имеет размерность по m и содержит значение в каждой ячейке) делит каждое значение в ячейке на значение в $tag переменный ответ этого делится снова по значению в $bn и, наконец, после выполнения всех операций деления значение умножается на 1 миллиард.

Заранее спасибо.

+0

Что в этом сценарии? Можете ли вы указать * sample * значения для файла, указанного '$ dfn', а для' $ tag' и '$ bn'? – Aif

+0

$ dfn - это файл с разделителями табуляции, содержащий значения и имеющий порядок n по m. $ tag = 12000000 и $ bn = 60000000000 – Angelo

+0

Я хотел иметь некоторые значения, чтобы иметь возможность запускать тесты локально. Но похоже, что мне больше не понадобится. – Aif

ответ

1

Я думаю, что вы shuld меняете/* на *, когда вы mutiply значение на 1 миллиард.

+0

Dhanyawad Raghuramjee – Angelo

3

Переменные $tag и $bn относятся к полям в строках. Я предполагаю, что вы действительно хотите, чтобы они были переменными окружения. Передайте их как переменные в awk:

cat $dfn | 
    gawk -v tag="$tag" -v bn="$bn" '{ 
     for (i = 1; i <= NF; i += 1) { 
     printf "%f\t", ((($i/tag)/bn) * 1000000000) 
     } 
     printf "\n" 
    }'>fn 

Редактировать: Также исправить умножение, как указано Raghuram.

+0

@Angelo Вам также нужно изменить умножение. –