1

查找 UNIX 脚本命令(如 awk、sed 或 sort)以查看此列表根据第 1、第 2 和第 3 列确定重复项,然后使用第 4 列确定哪个是最高版本。然后在最后一列标记它。

已经使用以下命令完成了我所有的排序和重复删除:

cat orig.txt |sort -t\| -k3 |uniq -u -d > list.uni 
sort -t'|' -k 1,3 -k 4,4n list.uni > list.txt

我们将调用 list.txt 的零件名称示例列表

cat list.txt

M86-STD|LIB DRAWING|0186-528013|2| | 
M86-STD|LIB DRAWING|0186-528013|3|B| 
M86-STD|LIB DRAWING|0186-528013|4|C| 
M86-STD|LIB DRAWING|0186-528013|5|D| 
M86_STD|LIB ASSEMBLY|0186-528013|3| | 
M86_STD|LIB ASSEMBLY|0186-528013|4|B| 
M86_STD|LIB ASSEMBLY|0186-528013|5|D| 

结果将如下所示:

M86-STD|LIB DRAWING|0186-528013|2| | 
M86-STD|LIB DRAWING|0186-528013|3|B| 
M86-STD|LIB DRAWING|0186-528013|4|C| 
M86-STD|LIB DRAWING|0186-528013|5|D|Highestver
M86_STD|LIB ASSEMBLY|0186-528013|3| | 
M86_STD|LIB ASSEMBLY|0186-528013|4|B| 
M86_STD|LIB ASSEMBLY|0186-528013|5|D|Highestver

谢谢

4

1 回答 1

0
awk -F'|' -e '{b=$1"|"$2"|"$3;h="highest version";if(a==b)h="";a=b;print $0 h}'

这个想法是b包含标识当前行序列的三列。a具有上一行的对应值。如果两者不同,则这是一组的第一行,因此是最高版本。

于 2012-09-20T13:49:52.657 回答