AWK:列1和1时删除所有行2匹配

时间:2018-05-17 15:47:54

标签: awk

我不仅要删除重复项,还要删除重复项时要检查的行。

现有代码

awk '!a[$1$2]++'

输入

HNSONV  LSVRNV  10  srlg-value  52000
HNSONV  PHNAAZ  0   srlg-value  53000
HRHNLA  PNSCFL  0   srlg-value  54000
HRHNLA  PNSCFL  10  srlg-value  55000
HRHNLA  PNSCFL  20  srlg-value  54500
HRHNLA  PNSCFL  30  srlg-value  55500
JHSNAR  KSCYMO  0   srlg-value  56000
JHSNAR  OKCYOK  0   srlg-value  57000

输出

HNSONV  LSVRNV  10  srlg-value  52000
HNSONV  PHNAAZ  0   srlg-value  53000
JHSNAR  KSCYMO  0   srlg-value  56000
JHSNAR  OKCYOK  0   srlg-value  57000

2 个答案:

答案 0 :(得分:1)

两遍算法

$ awk 'NR==FNR{a[$1,$2]++; next} a[$1,$2]==1' file{,}

HNSONV  LSVRNV  10  srlg-value  52000
HNSONV  PHNAAZ  0   srlg-value  53000
JHSNAR  KSCYMO  0   srlg-value  56000
JHSNAR  OKCYOK  0   srlg-value  57000

注意数组键中的,以防止由于两个字符串的串联而导致的误报匹配(例如" AB A"和" BA"将结束你的版本中的密钥相同。)

答案 1 :(得分:0)

假设前两个字段的字符长度始终为14,并且重复项与给定样本一样彼此相邻(如果需要,则对输入进行排序):

$ uniq -w14 -u ip.txt
HNSONV  LSVRNV  10  srlg-value  52000
HNSONV  PHNAAZ  0   srlg-value  53000
JHSNAR  KSCYMO  0   srlg-value  56000
JHSNAR  OKCYOK  0   srlg-value  57000

来自man uniq

  

uniq - 报告或省略重复的行

     

-u, - 唯一   只打印唯一的行

     

-w, - check-chars = N.   在行中比较不超过N个字符