我在删除重复的条目时遇到问题。(我在Shell中不好!)。这是情况 - 应用程序创建一个平面文本文件每行是一条记录,每个字段由分隔符“〜|”(不包括引号)分隔。所以记录看起来像 -
Field1~|Field2~|Field3~|Field4~|Field5~|Field6~|Field7~|
有些记录是重复的。重复记录由field-Field2的值决定。如何编写shell脚本/ awk / sed以根据此条件删除重复记录?然后脚本必须将输出写入其他文件。 我本可以在应用程序本身做到这一点,但由于性能问题,它无法完成。 谢谢你的帮助。
输入文件
Field1~|ABA~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|PQR~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|XYZ~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|ABA~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|RST~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|PQR~|Field3~|Field4~|Field5~|Field6~|Field7~|
输出应为 -
Field1~|ABA~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|PQR~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|XYZ~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|RST~|Field3~|Field4~|Field5~|Field6~|Field7~|
(记录顺序无关紧要。)
答案 0 :(得分:2)
不确定我是否正确理解了这个问题,但这就是你要找的东西吗?:
的test.txt:
Field1~|Field2~|Field3~|Field4~|Field5~|Field6~|Field7~|
foo~|Field2~|bar~|Field4~|Field5~|Field6~|Field7~|
Field1~|foobar~|Field3~|Field4~|Field5~|Field6~|Field7~|
致电sort:
sort --field-separator="~" --key 2,2 --unique test.txt
结果:
Field1~|Field2~|Field3~|Field4~|Field5~|Field6~|Field7~|
Field1~|foobar~|Field3~|Field4~|Field5~|Field6~|Field7~|
答案 1 :(得分:1)
如果要删除所有重复项
nawk -F'~|' '{a[$2]++;b[$2]=$0}END{for(i in a) if (a[i]==1){print b[i]} }' file
如果您只想保留一个版本的重复记录
nawk -F'~|' '!a[$2]++' file