簡體   English   中英

如何在bash和/或使用awk的單列中進行數學運算?

[英]How to do math operations in a single column in bash and/or using awk?

我有一排這樣的幾行:

20.000
15.000
42.500
42.500
45.000
45.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000

我需要以一個文件結尾:

第一個元素是20/2

第二個元素是前一個值+ 15/2

第三個元素是先前值+ 42.5 / 2

直到最后

我的問題是如何執行“循環”。

Perl解救:

perl -lne 'print $s += $_ / 2' input-file > output-file
  • -l從輸入中刪除換行符並將其添加到輸出
  • -n逐行讀取輸入,對每個輸入執行代碼
  • $_是從每一行讀取的值
  • / 2除以2
  • +=是將其乘車手側添加到其左側的操作員,並將結果存儲在左側,並返回新值。 我將變量$s命名為“ sum”。

嘗試這個:

awk '{prev += ($0) / 2; printf("%.3f\n", prev);}' a2.txt 


輸入:

20.000
15.000
42.500
42.500
45.000
45.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000
50.000


輸出:

10.000
17.500
38.750
60.000
82.500
105.000
130.000
155.000
180.000
205.000
230.000
255.000
280.000
305.000
330.000


只是,

$ awk '{print v+=$1/2}' file

10
17.5
38.75
60
82.5
105
130
155
180
205
230
255
280
305
330

您可以根據需要設置printf格式

我猜你需要輸出為一行:

awk '{s+=$1/2; out = out s " ";} END{print out}' file
#=> 10 17.5 38.75 60 82.5 105 130 155 180 205 230 255 280 305 330

最后,我認為沒有多余的空間。
如果您不想要它,可以將其刪除。

我想你可能找for循環

awk '{for (i = 1; i <= NF; i++) print  temp = temp + $i/2  }' filename

記住一件事, 指的是列號,如果您只想在一列中運行此操作,則可以更改

i =列號; i <=列號;

您可以將此循環用於復雜的情況。

如果要更改分隔符,可以使用-F和分隔符之類的參數。

awk -F ":" '{}' filename

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM