我在下面的文件中有2个字段。
字段1是名称,字段2是交易日期。
我想要具有最低交易日期的唯一名称
cat abc.lst
John_20130201
David_20130202
Scott_20130203
Li_20130201
John_20130202
Scott_20130201
David_20130201
Li_20130204
Torres_20121231
输出所需
John_20130201
Li_20130201
Scott_20130201
David_20130201
Torres_20121231
答案 0 :(得分:4)
sort -t_ -nk2 abc.lst | awk -F_ '!a[$1]++'
或保存管道并执行此操作 -
awk -F_ '!a[$1]++' <(sort -t_ -nk2 abc.lst)
答案 1 :(得分:0)
awk -F_ '{ l = lowest[$1]; if (!l || $2 < l) { lowest[$1] = $2 } }
END { for (name in lowest) print name FS lowest[name] }'
(如果输出顺序无关紧要)
答案 2 :(得分:0)
这个单行选择那些条目。但不排序输出:
awk -F_ '$1 in a{a[$1]=$2>a[$1]?a[$1]:$2;next}{a[$1]=$2}
END{for(x in a)print x"_"a[x]}' file
答案 3 :(得分:0)
纯bash
解决方案(未按名称排序):
declare -A hash
while IFS=_ read nam val; do
[[ -z "${hash[$nam]}" || $val < "${hash[$nam]}" ]] && hash[$nam]=$val
done <abc.lst
for i in ${!hash[*]}; do echo ${i}_${hash[$i]}; done
输出:
David_20130201
Li_20130201
John_20130201
Scott_20130201
Torres_20121231
答案 4 :(得分:-2)
使用sort
命令:
cat abc.lst | sort -u -t_ -k1,1
并在man sort