非常に大きな行列の変数を数値化したいと思います。 たとえば、のは、私が選択した列の変数の数を数えます。
1 Blue
2 Blue
3 Blue
4 Red
5 Red
6 Yellow
を持っているとしましょうそして、私は取得したいと思います:
1-3 Blue
4-5 Red
6-6 Yellow
はawkを可能に使用していることですか? awkでは
非常に大きな行列の変数を数値化したいと思います。 たとえば、のは、私が選択した列の変数の数を数えます。
1 Blue
2 Blue
3 Blue
4 Red
5 Red
6 Yellow
を持っているとしましょうそして、私は取得したいと思います:
1-3 Blue
4-5 Red
6-6 Yellow
はawkを可能に使用していることですか? 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
にパイプを接続します。
$ 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
並べ替えまたはグループ化された入力
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
を必要としない代替