按列排序并按另一列 uniq
Sort by column and uniq by another column
我有下面的 table,它被 ";"" 分开,并且排序像
Date;Name;ID;Region;Empty;CardNumber;Temperature
我需要列出卡片的最高温度,每张卡片必须是唯一的。此外,最终列表必须按温度列从大到小排序。
输入:
1999;D;153;RIZE;;LT1;86
2013;D;153;RIZE;;LT2;88
2012;D;153;RIZE;;LT3;9
2011;D;153;RIZE;;LT4;81
2010;D;153;RIZE;;LT1;75
1888;D;153;RIZE;;LT2;76
2008;D;153;RIZE;;LT3;77
2006;D;153;RIZE;;LT4;78
输出:
2013;D;153;RIZE;;LT2;88
1999;D;153;RIZE;;LT1;86
2011;D;153;RIZE;;LT4;81
2008;D;153;RIZE;;LT3;77
我尝试了以下命令,但给出了不相关的输出。问候。
sort -t ';' -rnk 7 sil3 | sort -u -t ';' -rk 2,6
2011;D;153;RIZE;;LT4;81
2012;D;153;RIZE;;LT3;9
2013;D;153;RIZE;;LT2;88
2010;D;153;RIZE;;LT1;75
以下 awk
可能会对您有所帮助。(在 Solaris/SunOS 系统上,将 awk 更改为 /usr/xpg4/bin/awk 、 /usr/xpg6/bin/awk 或 nawk)
awk -F";" '{a[$(NF-1)]=a[$(NF-1)]>$NF?a[$(NF-1)]:$NF;b[$(NF-1)]=[=10=];b[$(NF-1),$NF]=[=10=]} END{for(i in a){print b[i,a[i]]}}' Input_file
在 GNU awk 中:
$ gawk '
BEGIN { FS=OFS=";" }
# { k= FS FS FS }
>t[] { # >t[k] {
t[]= # t[k]=
r[]=[=10=] # r[k]=[=10=]
}
END {
PROCINFO["sorted_in"]="@val_num_desc"
for(i in t)
print r[i]
}' file
2013;D;153;RIZE;;LT2;88
1999;D;153;RIZE;;LT1;86
2011;D;153;RIZE;;LT4;81
2008;D;153;RIZE;;LT3;77
如果您没有可用的 GNU awk,请使用 sort
:
对输出进行排序
$ awk '
BEGIN { FS=OFS=";" }
>t[] {
t[]=
r[]=[=11=]
}
END {
for(i in t)
print r[i]
}' file |
sort -s -t \; -k7nr
2013;D;153;RIZE;;LT2;88
1999;D;153;RIZE;;LT1;86
2011;D;153;RIZE;;LT4;81
2008;D;153;RIZE;;LT3;77
我有下面的 table,它被 ";"" 分开,并且排序像
Date;Name;ID;Region;Empty;CardNumber;Temperature
我需要列出卡片的最高温度,每张卡片必须是唯一的。此外,最终列表必须按温度列从大到小排序。
输入:
1999;D;153;RIZE;;LT1;86
2013;D;153;RIZE;;LT2;88
2012;D;153;RIZE;;LT3;9
2011;D;153;RIZE;;LT4;81
2010;D;153;RIZE;;LT1;75
1888;D;153;RIZE;;LT2;76
2008;D;153;RIZE;;LT3;77
2006;D;153;RIZE;;LT4;78
输出:
2013;D;153;RIZE;;LT2;88
1999;D;153;RIZE;;LT1;86
2011;D;153;RIZE;;LT4;81
2008;D;153;RIZE;;LT3;77
我尝试了以下命令,但给出了不相关的输出。问候。
sort -t ';' -rnk 7 sil3 | sort -u -t ';' -rk 2,6
2011;D;153;RIZE;;LT4;81
2012;D;153;RIZE;;LT3;9
2013;D;153;RIZE;;LT2;88
2010;D;153;RIZE;;LT1;75
以下 awk
可能会对您有所帮助。(在 Solaris/SunOS 系统上,将 awk 更改为 /usr/xpg4/bin/awk 、 /usr/xpg6/bin/awk 或 nawk)
awk -F";" '{a[$(NF-1)]=a[$(NF-1)]>$NF?a[$(NF-1)]:$NF;b[$(NF-1)]=[=10=];b[$(NF-1),$NF]=[=10=]} END{for(i in a){print b[i,a[i]]}}' Input_file
在 GNU awk 中:
$ gawk '
BEGIN { FS=OFS=";" }
# { k= FS FS FS }
>t[] { # >t[k] {
t[]= # t[k]=
r[]=[=10=] # r[k]=[=10=]
}
END {
PROCINFO["sorted_in"]="@val_num_desc"
for(i in t)
print r[i]
}' file
2013;D;153;RIZE;;LT2;88
1999;D;153;RIZE;;LT1;86
2011;D;153;RIZE;;LT4;81
2008;D;153;RIZE;;LT3;77
如果您没有可用的 GNU awk,请使用 sort
:
$ awk '
BEGIN { FS=OFS=";" }
>t[] {
t[]=
r[]=[=11=]
}
END {
for(i in t)
print r[i]
}' file |
sort -s -t \; -k7nr
2013;D;153;RIZE;;LT2;88
1999;D;153;RIZE;;LT1;86
2011;D;153;RIZE;;LT4;81
2008;D;153;RIZE;;LT3;77