如何在首先添加一列後,根據表達式計算值。該表達式具有如下形式:(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
感謝
如何在首先添加一列後,根據表達式計算值。該表達式具有如下形式:(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
感謝
,你在你的問題中定義的規則,在最後一行的數量不應該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
你能解釋一下你是如何進入'180000'的嗎? – iruvar