我想量化一个非常大的矩阵的变量。例如,假设我有
1 Blue
2 Blue
3 Blue
4 Red
5 Red
6 Yellow
我想要获得:
1-3 Blue
4-5 Red
6-6 Yellow
使用awk可以吗?
发布于 2017-04-11 21:15:42
$ 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
发布于 2017-04-11 23:59:37
一种不需要排序或分组输入的替代方案
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
发布于 2017-04-11 21:03:37
在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
以进行有序输出。
https://stackoverflow.com/questions/43346516
复制相似问题