量化选定列的变量

时间:2017-04-11 12:53:56

标签: unix awk

我想量化一个非常大的矩阵的变量。 例如,假设我有

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

我想获得:

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

使用awk可以吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:1)

在awk中:

$ 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以获得有序输出。