несколько команд внутри awk - PullRequest
0 голосов
/ 29 ноября 2011

sry открывает новую тему, но awk сводит меня с ума! > <я пытаюсь выполнить несколько командных назначений внутри одного awk, но я не могу заставить его работать, помогите, если это ez for u: P я не могу заставить работать синтаксис </p>

редактировать: я использую / bin / bash

for f in `seq $nlinpE $loopE`; 
do 

awk  -F ","'  
BEGIN {}    
'$f'  { dataI2[$f]=$2;
    dataI3[$f]=$3;
    dataI4[$f]=$4;
    noD1[$f]=$dataI1[$f];
    noD2[$f]=$dataI2[$f];
    noD3[$f]=$dataI3[$f];
    noD1i[$f]=`echo "$nlinpN1 + $dataI1"|bc -l`;
    noD2i[$f]=`echo "$nlinpN1 + $dataI2"|bc -l`;
    noD3i[$f]=`echo "$nlinpN1 + $dataI3"|bc -l`;
    }   
'${noD1i[$f]}' { 
    dataIi2[$f]=$2;
    dataIi3[$f]=$3;
    dataIi4[$f]=$4;
    }

'${noD2i[$f]}'  { 
    dataIii2[$f]=$2;
    dataIii3[$f]=$3;
    dataIii4[$f]=$4;
    }

'${noD2i[$f]}'  { 
    dataIiii2[$f]=$2;
    dataIiii3[$f]=$3;
    dataIiii4[$f]=$4;
    }
END{}                 
' <aoa_5.inp;

сделано

ввод выглядит как:

 17,   3.22854114,  0.562598288,  0.384291202
 18,   2.96085286,  0.085116826,  0.285071939
 19,   3.40070796,   2.27838659,  0.302027524
 20,   3.20035744,  0.333615214,  0.262585849
 21,   2.85644341,  0.258691043,  0.369726121
 22,   3.73537922,    1.3267405,  0.295917094
 23,   3.69372559,   1.32601321,  0.306054831
 24,   3.28857207,   0.63199228,  0.378117412
 25,   3.27523994,  0.695856452,  0.377585977

просто присвоение переменных atm, получение числа без запятых
я получаю синтаксический тип ошибки:

awk: 9: unexpected character '`'
awk: 10: unexpected character '`'
awk: 11: unexpected character '`'
(standard_in) 2: syntax error
(standard_in) 2: syntax error
awk: line 1: syntax error at or near {
^C

ТНХ

1 Ответ

6 голосов
/ 29 ноября 2011

Возможно, это поможет вам немного очистить синтаксис, чтобы мы могли понять, что вы пытаетесь сделать.

Блоки BEGIN и END являются необязательными. Игнорируя шаблоны на данный момент, awk-программа может выглядеть следующим образом.

BEGIN {
    # Things to be done before you start processing rows.
}
{
    # Things to be done for each row.
}
END {
    # Things to be done after processing the last row.
}

Если вам не нужны блоки BEGIN или END, это может выглядеть примерно так.

{
    # Things to be done for each row.
}

Эта awk-программа присваивает значение $ 2, $ 3 и $ 4 переменной dataI и печатает его один раз для каждой строки.

{
  dataI = sprintf("%s %s %s", $2, $3, $4);
  print dataI;
}

Это назначение не влияет на значения $ 2, $ 3 и $ 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...