2017-02-15 57 views
0

我正在尋找一種方法來生成我的模型預測的一些統計信息。 在左邊我有真正的價值觀,在右邊我有預言。 我的真實值超過了一個區間,所以我想將它們壓縮爲每個區間的單個值,並知道做出了哪些預測。 我認爲我需要對第一列做類似「uniq」的操作,並迭代第二列的每一行,直到第一列的值發生變化。 我會想象awk在這方面會非常好,使用$ 1和$ 2來處理列,但是第二列的迭代不會丟失第一列中的信息就是我卡住的地方。值得注意的是,第一列中的值可能會出現很多次,我希望它們在每個區間中重複,而不是按順序排列。 我可以接受shell或python中的任何代碼。刪除一列中的重複和迭代行在第二列中摺疊

示例輸入:

1 1 
1 0 
1 1 
2 2 
2 2 
1 1 
3 3 
3 3 
3 2 
3 3 
2 3 
2 2 
2 1 

輸出示例:

1 1 0 1 
2 2 2 
1 1 
3 3 3 2 3 
2 3 2 1 
+2

你有沒有想過到目前爲止什麼? –

回答

1
使用

awk真正簡單:

awk 'NR>1{cr="\n"}L!=$1{printf "%s%s ",cr,$1;L=$1}{printf " %s" ,$2}END{print ""}' input 

結果

1 1 0 1 
2 2 2 
1 1 
3 3 3 2 3 
2 3 2 1 

說明

NR>1{cr="\n"}cr回車:將,直到第一記錄處理(NR>1)。

L!=$1{printf "%s%s ",cr,$1;L=$1}:如果從目前($1)的L最後關鍵不同它打印CR(最初記錄爲空)當前關鍵$1,並將其存儲在L值作爲最後的關鍵處理。

{printf " %s" ,$2}:只顯示的第二列每條記錄

END{print ""}:打印最後一個回車處理所有記錄時。

+0

謝謝你的好解釋!奇蹟般有效。 – badner

1

下面是在bash版本:

#/bin/bash 
while read a b; do 
    if [ $a != "$val" ]; then 
     [ -n "$val" ] && echo $val $pred 
     val=$a 
     pred=$b 
    else 
     pred="$pred $b" 
    fi 
done <inputfile 
[ -n "$val" ] && echo $val $pred