2016-09-28 46 views
0

我的輸入文件是如下是否可以使用awk在輸入文件中插入新列?

文件名:marksheet

No   Name  Sub1  Sub2 Sub3 
1   Atul  89  56  78 
2   Jay  56  88  75 
3   Mariya  85  75  56 
4   Nita  90  88  95 

現在我想執行總計和百分比。 所以我以下命令進行

awk 'total=$3+$4+$5, per=total/3 {print total "\t" per}' marksheet 

它給出的總和列輸出。 as

223  74.3333 
219  73 
216  72 
273  91 

所以現在我想在文件標記表中添加上面的列(輸出)。所以如果可能的話,那麼如何使用awk來執行命令。

+0

http://stackoverflow.com/questions/16529716/awk-save-modifications-inplace我引用:_In最新的GNU Awk(自4.1.0發佈以來),它有「就地」文件編輯選項 - -_ –

回答

1

Begin語句是定義文件的標題。你已經計算了總和和平均值。打印$0意味着整條線,然後total然後per變量包含總和和平均值的值。 OFS這裏使得awk知道要使用製表符分隔的輸出字段。

awk -v OFS="\t" 'BEGIN{print "No   Name  Sub1  Sub2 Sub3 total percent"} NR>1{total=$3+$4+$5; per=total/3 ;print $0 ,total,per }' marksheet 
No   Name  Sub1  Sub2 Sub3  total percent 
1   Atul  89  56  78  223  74.3333 
2   Jay  56  88  75  219  73 
3   Mariya  85  75  56  216  72 
4   Nita  90  88  95  273  91 

實際修改您的基本文件:

awk -v OFS="\t" 'BEGIN{print "No   Name  Sub1  Sub2 Sub3 total percent"} NR>1{total=$3+$4+$5; per=total/3 ;print $0 ,total,per }' marksheet >marksheet.tmp && mv marksheet.tmp marksheet 
+0

實際上,先生我想在文件「標記表」中插入總和百分比列,而不是僅輸出。 – Dip

+0

@Dip檢查答案更新。 –

+0

不錯的嘗試,但在awk中的printf會簡化它! – Inian

0

正如我從來沒有使用過的-i開關和就地編輯(在牛羚因爲V AWK 4.1.0(gawk -V),根據awk save modifications in place)我決定採取它旋轉。我把OP的示例數據和代碼,並用它去:

$ awk -i inplace -v INPLACE_SUFFIX=.bak 'NR==1 && $6="total", $7="per"; NR>1 && $6=$3+$4+$5, $7=$6/3' OFS='\t' file 
$ cat file 
No  Name Sub1 Sub2 Sub3 total per 
1  Atul 89  56  78  223  74.3333 
2  Jay  56  88  75  219  73 
3  Mariya 85  75  56  216  72 
4  Nita 90  88  95  273  91 

而且備份:

$ cat file.bak 
No   Name  Sub1  Sub2 Sub3 
1   Atul  89  56  78 
2   Jay  56  88  75 
3   Mariya  85  75  56 
4   Nita  90  88  95 

間距的差異來自於輸出與cut'n真正的標籤粘貼輸入問題。

相關問題