Unix 用于按列标识重复项并标记最高版本的awk脚本

Unix 用于按列标识重复项并标记最高版本的awk脚本,unix,sorting,duplicates,Unix,Sorting,Duplicates,查找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

查找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
谢谢


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

希望您批准我的重新格式化。使用编辑工具上的{}使块保持在一起。如果编辑不合适,可以通过单击我名字附近的“编辑”标记并找到“撤消”标记来回滚编辑。好运气只是想知道你的命令,给uniq的标志有什么意义?没有标志的简单uniq不会达到同样的结果吗?结果是如何按版本降序排列的,您是在哪里告诉sort这样做的?是的,你是对的,我在修改我的代码,在这个问题中更新了它,但没有更新列表。我对其进行了更新,以反映列表的正确降序。您也很正确,uniq语句将不使用任何标志。我从我的原始代码中删除了它们。对不起,我从来没有为这个答案感谢过你。在我的情况下有效。
awk -F'|' -e '{b=$1"|"$2"|"$3;h="highest version";if(a==b)h="";a=b;print $0 h}'