【问题标题】:awk script to identify duplicates by column and tag highest version用于按列和标记最高版本识别重复项的 awk 脚本
【发布时间】:2012-09-12 03:55:45
【问题描述】:

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

谢谢

【问题讨论】:

  • 希望您同意我的重新格式化。在编辑工具上使用 {} 将块保持在一起。如果这些不合适,您可以通过单击我的名字附近的“编辑”标签并找到撤消标签来回滚编辑。祝你好运
  • 只是想知道你的命令,给uniq 的标志有什么意义?没有标志的简单uniq 不会达到相同的结果吗?以及为什么按版本按降序顺序排序的结果,你在哪里告诉sort这样做的?逆序不应该是4,4rn吗?
  • 是的,你是对的,我正在修改我的代码,在这个问题中更新了它,但没有更新列表。我更新了这个以反映列表的正确降序
  • 你也是正确的,uniq 语句可以在没有标志的情况下工作。我将它们从我的原始代码中删除。

标签: unix sorting duplicates


【解决方案1】:
awk -F'|' -e '{b=$1"|"$2"|"$3;h="highest version";if(a==b)h="";a=b;print $0 h}'

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

【讨论】:

  • 对不起,我从来没有感谢你的回答。在我的情况下有效。
猜你喜欢
  • 2021-12-05
  • 2015-09-26
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多