我不仅要删除重复项,还要删除重复项时要检查的行。
现有代码
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
答案 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个字符