2013-07-17 55 views
0

如何在首先添加一列後,根據表達式計算值。該表達式具有如下形式:(vn + v0)* vl其中v0和v1分別是第3列的第一個和最後一個元素,vn是該列的第n個元素。例如,我們有一個文本表:通過awk表達式添加從另一列派生的列

1 2 3 4 
10 20 30 40 
100 200 300 400 

應該轉換爲

1 1800 3 4 
10 9900 30 40 
100 180000 300 400 

感謝

+1

你能解釋一下你是如何進入'180000'的嗎? – iruvar

回答

1

,你在你的問題中定義的規則,在最後一行的數量不應該180000。它應該是(300+3)*300=90900

這AWK行會爲你工作:

awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]}7' file file 

輸出爲:

kent$ awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]}7' file file 
1 1800 3 4 
10 9900 30 40 
100 90900 300 400 

編輯

OP希望第一後添加新列:

kent$ awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file 
1 1800 2 3 4 
10 9900 20 30 40 
100 90900 200 300 400 
+0

我使用了上述命令,但是它替代了第二列而不是添加。如何解決它? – Atoof

+1

@Atoof awk行給出相同的輸出作爲您的預期結果在你的問題。請仔細檢查一下。如果你想「添加」,你應該讓我們知道在哪裏添加。先編輯你的問題! – Kent

+0

@請參閱編輯,在第一個之後添加一個新列。 – Kent