【发布时间】:2016-07-16 10:51:05
【问题描述】:
我总是感谢您的帮助。
我想删除第二列中包含重复字符串的行。
test.txt
658 invert_d2e_q_reg_0_/Qalu_ecl_zlow_e 0.825692
659 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[31] 0.825692
660 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[63] 0.825692
661 invert_d2e_q_reg_0_/Qalu_ecl_zhigh_e 0.825692
665 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[62] 0.825692
666 invert_d2e_q_reg_0_/Qalu_ecl_zlow_e 0.825692
668 invert_d2e_q_reg_0_/Qalu_ecl_zhigh_e 0.825692
670 invert_d2e_q_reg_0_/Qalu_ecl_zhigh_e 0.825692
673 invert_d2e_q_reg_0_/Qalu_ecl_zlow_e 0.825692
675 invert_d2e_q_reg_0_/Qalu_ecl_zhigh_e 0.825692
677 invert_d2e_q_reg_0_/Qalu_ecl_zhigh_e 0.825692
678 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[27] 0.825692
679 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[27] 0.8120
.
.
.
输出.txt
658 invert_d2e_q_reg_0_/Qalu_ecl_zlow_e 0.825692
659 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[31] 0.825692
660 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[63] 0.825692
661 invert_d2e_q_reg_0_/Qalu_ecl_zhigh_e 0.825692
665 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[62] 0.825692
678 invert_d2e_q_reg_0_/Qalu_byp_rd_data_e[27] 0.825692
.
.
.
我知道 sed 可以删除带有预定义特定字符串的行,但在我的情况下,我不能指望这些字符串是重复的。此外,重复的字符串可能超过 1000 个。
我使用“uniq”来完成这项工作,但这不起作用。 uniq –u –f 4 test.txt (-u 打印唯一的行。-f 跳过前 4 个字母。)
有没有办法用 sed/awk/perl 做到这一点?或者请更正我的 uniq 语义。
最好的,
在英
【问题讨论】:
-
man sort:查看-u选项。您需要指定一个密钥,也许是-k2。祝你好运。 -
uniq需要对已排序的输入进行操作。所以使用sort -k4 | uniq -u -f4 -
awk使用数组应该可以快速完成这项工作。
标签: sed duplicates removeclass uniq