1

我在下面的文件中有 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
4

5 回答 5

4
sort -t_ -nk2 abc.lst | awk -F_ '!a[$1]++'

或保存管道并执行此操作 -

awk -F_ '!a[$1]++' <(sort -t_ -nk2 abc.lst)
于 2013-05-29T21:17:34.913 回答
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
于 2013-05-29T21:12:06.463 回答
0
awk -F_ '{ l = lowest[$1]; if (!l || $2 < l) { lowest[$1] = $2 } }
         END { for (name in lowest) print name FS lowest[name] }'

(如果输出顺序无关紧要)

于 2013-05-29T21:09:51.203 回答
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
于 2013-05-29T22:00:41.883 回答
-2

使用sort命令:

cat abc.lst | sort -u -t_ -k1,1

并阅读它man sort

于 2013-05-29T21:10:43.520 回答