Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在unix中选择唯一的最低行_Bash_Awk - Fatal编程技术网

Bash 在unix中选择唯一的最低行

Bash 在unix中选择唯一的最低行,bash,awk,Bash,Awk,我在下面的文件中有两个字段 字段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 T

我在下面的文件中有两个字段

字段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
awk-F{l=lovel[$1];if(!l{124;}$2

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

使用
sort
命令:

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

并在
mansort

上阅读相关内容,这一行选择了这些条目。但不会对输出进行排序:

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
或保存一个管道并执行以下操作-

awk -F_ '!a[$1]++' <(sort -t_ -nk2 abc.lst)

awk-F_'![$1]+'纯
bash
解决方案(不按名称排序):


输出是如何排序的?或者顺序不重要?嗯,还有一个
bash
标记。无论如何,我会用
替换
cat abc.lst
除了无用的cat之外,您的排序无论如何都不能正常工作。
sort
接受文件参数。您需要
-k2
-r
。第一行的格式更紧凑
!a[$1]| | a[$1]>$2{a[$1]=$2}
@TrueY这太漂亮了!!
sort -t_ -nk2 abc.lst | awk -F_ '!a[$1]++'
awk -F_ '!a[$1]++' <(sort -t_ -nk2 abc.lst)
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