2017-01-03 38 views
0

我需要將$6的第一條記錄除以每個唯一ID($ 1)的第一條記錄$4如何分割和打印每個唯一ID的字段開頭?

4 2016-07-19 06:09:50 546.5 3 11.5 
4 2016-07-20 06:40:03 543.667 3 11.5 
4 2016-07-21 05:43:18 539 3 11.5 
4 2016-07-22 07:18:20 535 3  11.5 
10 2016-07-20 08:08:45 488 3  17.5 
10 2016-07-21 07:32:35 490.5 3 17.5 
10 2016-07-23 06:01:58 470.5 3 17.5 
10 2016-07-24 08:26:02 472 3  17.5 

輸出將這個樣子,

4 2016-07-19 06:09:50 546.5 3 11.5 0.02 
4 2016-07-20 06:40:03 543.667 3 11.5 0.02 
4 2016-07-21 05:43:18 539 3 11.5 0.02 
4 2016-07-22 07:18:20 535 3  11.5 0.02 
10 2016-07-20 08:08:45 488 3  17.5 0.036 
10 2016-07-21 07:32:35 490.5 3 17.5 0.036 
10 2016-07-23 06:01:58 470.5 3 17.5 0.036 
10 2016-07-24 08:26:02 472 3  17.5 0.036 
+0

0.02是否來自11.5/546.5?而從17.5/488.3開始的0.036呢? –

+0

@DavidZ正是。 – Alula

+0

您對「每個唯一ID($ 1)」的含義是什麼。「在您的示例輸出中,「$ 1」不是唯一的。在$ 1中有許多以'4'和'10'開頭的行。竇想刪除以'4'開頭的最後三行,並刪除最後三行以'10'開頭的行? –

回答

0

awk來救援!

$ awk '!($1 in a){a[$1]=$6/$4} {printf "%s\t%.3f\n",$0,a[$1]}' file 

4 2016-07-19 06:09:50 546.5 3 11.5  0.021 
4 2016-07-20 06:40:03 543.667 3 11.5  0.021 
4 2016-07-21 05:43:18 539 3 11.5  0.021 
4 2016-07-22 07:18:20 535 3  11.5  0.021 
10 2016-07-20 08:08:45 488 3  17.5  0.036 
10 2016-07-21 07:32:35 490.5 3 17.5  0.036 
10 2016-07-23 06:01:58 470.5 3 17.5  0.036 
10 2016-07-24 08:26:02 472 3  17.5  0.036 

輸出格式並不一致(2或3個十進制數字),有辦法完全匹配,但不知道這是故意的。

+0

它完美地工作,因爲我想感謝。 – Alula

1
$ awk 'p!=$1{q=sprintf("%.3f", $6/$4)} {$(NF+1)=q;p=$1}1' file 
4 2016-07-19 06:09:50 546.5 3 11.5 0.021 
4 2016-07-20 06:40:03 543.667 3 11.5 0.021 
4 2016-07-21 05:43:18 539 3 11.5 0.021 
4 2016-07-22 07:18:20 535 3 11.5 0.021 
10 2016-07-20 08:08:45 488 3 17.5 0.036 
10 2016-07-21 07:32:35 490.5 3 17.5 0.036 
10 2016-07-23 06:01:58 470.5 3 17.5 0.036 
10 2016-07-24 08:26:02 472 3 17.5 0.036 

解釋:

p!=$1 {      # when the $1 changes 
    q=sprintf("%.3f", $6/$4) # calculate the value q to append to records 
} 
{        # for all records 
    $(NF+1)=q     # append q to them 
    p=$1      # remember previous $1 
} 1       # print 
+0

它只是將$ 6的區域劃分爲每行$ 4。但我需要劃分這些字段的開頭,以便唯一ID的所有行都具有相同的結果。你能檢查一下嗎?謝謝 – Alula

+0

它只是爲每個新的'$ 1'進行劃分。以前的版本沒有。 –

+0

我的興趣是隻爲每個ID和打印分配兩個字段的第一個記錄。數據被排序。 – Alula

0

@Alula-與karakfa一樣的邏輯,但是儘管首先經過循環,然後打印,然後在打印本身中進行檢查。

awk '{printf "%s\t%.3f\n",$0,!a[$1]?a[$1]=$6/$4:a[$1]}' Input_file 

我希望這可以幫助你。

相關問題