簡體   English   中英

在所有列上循環awk數學

[英]Loop awk math over all columns

我有一個awk腳本,在該腳本中我對文件進行了一些算術運算,並希望在文件的所有列上循環方程式。 當我將方程式僅應用到一個奇異的列時,它可以工作,但是我嘗試循環它失敗,並且將結果錯誤地輸出到同一列(我希望將其保留在單獨的列中)。 我有效的單數列方程是:

#!/bin/awk -f

BEGIN {
}
{

    if(NR == 1) {
           blank = $1
       }
    if(NR == 2) {
           zero = $1
       }
    base = zero - blank;

    if(NR > 3) {

    print (($1 - blank)/base) >> "data.txt"

    }


}
END {
}

輸入:

10
20
30
40
50

產量

2
3
4

我嘗試對多列進行操作:

#!/bin/awk -f

BEGIN {
}
{
    for(i = 1; i <= NF; i++) {
    if(NR == 1) {
           blank = $i
       }
    if(NR == 2) {
           zero = $i
       }
    base = zero - blank;

    if(NR > 3) {

       print (($i - blank)/base) >> "data.txt"

    }
    }

}
END {
}

輸入:

10 60
20 70
30 80
40 90
50 100

輸出:

-2
3
-1
4

預期產量:

2 2
3 3
4 4

另外,嘗試遍歷所有列時,我無法像我想要的那樣僅輸出結果以覆蓋原始文件,因為它將添加越來越多的內容並創建無限循環。 在上面,我必須輸出到另一個文件,但是我想用結果覆蓋原始文件。

如果您的測試用例輸出錯誤,則可能是您要查找的內容(每列相同的公式):

$ awk 'NR==1{split($0,b);next} 
       NR==2{split($0,z);next} 
            {for(i=1;i<=NF;i++) printf "%s", ($i-b[i])/(z[i]-b[i]) OFS; 
             print ""}' file

會給你

2 2
3 3
4 4
seq 10 10 100 | pr -2Ts" " | awk '
    NR == 1 {blank = $1} 
    NR == 2 {zero = $1} 
    NR >= 3 {
        for (i=1; i<=NF; i++) 
            $i = ($i - blank) / (zero - blank)
        print 
    }
'
2 7
3 8
4 9

您需要注意需要在那些名字奇異的變量中捕獲哪個字段。

暫無
暫無

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

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