2017-04-11 12 views
0

非常に大きな行列の変数を数値化したいと思います。 たとえば、のは、私が選択した列の変数の数を数えます。

1 Blue 
2 Blue 
3 Blue 
4 Red 
5 Red 
6 Yellow 

を持っているとしましょうそして、私は取得したいと思います:

1-3 Blue 
4-5 Red 
6-6 Yellow 

はawkを可能に使用していることですか? awkでは

答えて

1

$ awk ' 
{ 
    if(min[$2]=="" || $1<min[$2]) # compare for min 
     min[$2]=$1 
    if(max[$2]=="" || $1>max[$2]) # compare for max 
     max[$2]=$1 
} 
END { 
    for(i in min)     # output loop 
     print min[i] "-" max[i], i 
}' foo 

出力:

4-5 Red 
1-3 Blue 
6-6 Yellow 

出力順序はランダムです。順序付き出力の場合はsortにパイプを接続します。

2
$ awk '$2!=p{if (s) print s"-"e, p; s=$1} {e=$1; p=$2} END{print s"-"e, p}' file 
1-3 Blue 
4-5 Red 
6-6 Yellow 
2

並べ替えまたはグループ化された入力

f() { sort -k2 -k1,1n$1 "$2"; }; paste <(f "" file) <(f "r" file) | 
awk '!a[$2]++{print $1"-"$3,$2}' 

1-3 Blue 
4-5 Red 
6-6 Yellow 
を必要としない代替
関連する問題