我想量化一个非常大的矩阵的变量。 例如,假设我有
1 Blue
2 Blue
3 Blue
4 Red
5 Red
6 Yellow
我想获得:
1-3 Blue
4-5 Red
6-6 Yellow
使用awk可以吗?
答案 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
以获得有序输出。