gpt4 book ai didi

arrays - 使用awk数组消除基于单独字段的重复列?

转载 作者:行者123 更新时间:2023-12-01 15:18:30 26 4
gpt4 key购买 nike

我正在尝试根据单独的字段消除一组重复行。

cat 文件.txt

1    345   a    blue
1 345 b blue
3 452 c blue
3 342 d green
3 342 e green
1 345 f green

我想删除基于字段 1 和 2 的重复行,但分别针对每种颜色。期望的输出:

1    345    a   blue
3 452 c blue
3 342 d green
1 345 f green

我可以使用遍历颜色的 for 循环 实现此输出:

for i in $(awk '{ print $4 }' file.txt | sort -u); do
grep -w ${i} |
awk '!x[$1,$2]++' >> output.txt
done

但这很慢。有什么方法可以在不使用循环的情况下获得此输出吗?

谢谢。

最佳答案

至少对于这个例子来说,它很简单:

$ awk 'arr[$1,$2,$4]++{next} 1' file
1 345 a blue
3 452 c blue
3 342 d green
1 345 f green

或者,您可以否定:

$ awk '!arr[$1,$2,$4]++' file

您也可以使用 GNU sort 进行相同的排序,这可能会更快:

$ sort -k4,4 -k2,2 -k1,1 -u file

关于arrays - 使用awk数组消除基于单独字段的重复列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42322026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com