2011-11-28 114 views
-1

sry打開一個新線程,但awk讓我瘋狂! > <我嘗試運行單個AWK裏面的幾個命令任務,但我不能讓它的工作,請幫助,如果這是EZ爲U:P I不能得到語法工作awk中的多個命令

編輯:使用IM /箱/ 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 

imjust分配變量大氣壓,得到數的w/o逗號
我得到這個錯誤語法類型:

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 

THX

+1

Tyically你只需要一個BEGIN和1個awk程序END塊。正常的處理是對每行文本進行操作。不是BEGIN/END塊的{{}}塊內的代碼將被視爲正常處理。 BEGIN和END意味着'在正常處理之前/之後執行此操作'。代碼中有多個所有類型的塊。最好顯示輸入和所需的輸出。祝你好運。 – shellter

+0

檢查新的格式,請幫助:) – bakabrr

+0

還需要樣品輸出!另外,爲什麼你使用外部變量''{{noD1i [$ f]}''等等?如果你必須使用外部變量,我們需要awk之外的一些bash代碼來設置變量的值。祝你好運。 – shellter

回答

5

也許這將幫助你清理你的語法一點,所以我們能理解你正在試圖做什麼。

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程序爲變量dataI分配$ 2,$ 3和$ 4的值,併爲每行打印一次。

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

該賦值對$ 2,$ 3和$ 4的值沒有影響。

+0

the整個事情歸結爲那些3添加行與'echo「」'和變量的賦值..得到這個語法的工作:( – bakabrr

+0

我可以在awk中添加嗎?..與bc或exp嗎?我可以執行任何命令在awk?cuz裏面我只在任何地方看到過打印我在網上去的 – bakabrr

+0

awk是一種編程語言。[這是一個教程。](http://www.grymoire.com/Unix/Awk.html)你可以做算術在awk中;你不需要爲此運行bc –