我在下面的表中划分了";" ,它的排序方式如
日期;名称; ID;区域;空; CardNumber;温度
我需要列出每张卡必须唯一的卡的最高温度。此外,最终列表必须按温度列更大到更小。
INPUT:
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
答案 0 :(得分:0)
以下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)]=$0;b[$(NF-1),$NF]=$0} END{for(i in a){print b[i,a[i]]}}' Input_file
答案 1 :(得分:0)
在GNU awk中:
$ gawk '
BEGIN { FS=OFS=";" }
# { k=$2 FS $3 FS $4 FS $6 }
$7>t[$6] { # $7>t[k] {
t[$6]=$7 # t[k]=$7
r[$6]=$0 # r[k]=$0
}
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=";" }
$7>t[$6] {
t[$6]=$7
r[$6]=$0
}
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