2016-09-28 10 views
0

私の入力ファイルはawkを使用して入力ファイルに新しい列を挿入することはできますか?

ファイル名以下の通りです:今、私は合計とパーセンテージを実行したい

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 

をmarksheet。 ので、私はそれが総と列の出力を与えるコマンドの下に

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

を行いました。

223  74.3333 
219  73 
216  72 
273  91 

としてだから今、私は、ファイルmarksheetに上記コラム(出力)を追加します。したがって、可能であれば、awkを使用してコマンドを実行する方法があります。

+0

http://stackoverflow.com/questions/16529716/awk-save-modifications-inplace私は引用しています:_最新のGNU Awk(4.1.0リリース以降)では、 "inplace"ファイル編集のオプションがあります - -_ –

答えて

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 

実際にあなたのベースファイルを変更するには:私は-iスイッチとインプレース編集を使用したことがなかったとして

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

Sirは実際には出力ではなく、ファイル "marksheet"に合計とパーセント値の列を挿入します。 – Dip

+0

回答の@Dipチェックアップデート。 –

+0

良い試みですが、awkのprintfはそれを単純化しました! – Inian

0

(。awkのV以来、ヌーでの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対出力の本当のタブから来ています。

関連する問題