删除重复项(两行)并仅基于子字符串复制

时间:2016-06-11 07:08:50

标签: bash duplicates uniq

也许有人可以帮我解决以下问题。

我用:

cat file1 file2 | sort -t} -k2 | less

从比较

中的位置5开始比较时,输出包含重复项
A01} value1 = 5000000000
B01} value1 = 5000000000
A01} value2 = 6000000000
B01} value2 = 7000000000

如何删除这两行:

A01} value1 = 5000000000
B01} value1 = 5000000000

完全来自我的输出?

结果应为:

A01} value2 = 6000000000
B01} value2 = 7000000000

2 个答案:

答案 0 :(得分:2)

我假设您要使用键2(值)到键4(数字)中的字段进行排序/ uniq。因此,在调用display:block

时会跳过字段1
uniq

答案 1 :(得分:0)

这样的事可能适合你:

% grep -vFf <(cut -d'}' -f2 file.txt | sort | uniq -d) file.txt
A01} value2 = 6000000000
B01} value2 = 7000000000

这将创建一个包含所有非唯一行的“文件”:

cut -d'}' -f2 file.txt | sort | uniq -d

<(...)是一个流程替换,其工作方式如下:

% echo <(ls)
/proc/self/fd/11

grep -F表示纯文本搜索,而-f期望带有要搜索的关键字的文件名。 -v撤消了比赛。

对于乘法文件,您需要-h来抑制匹配文件名:

grep -hvFf <(cut -d'}' -f2 a.txt b.txt | sort | uniq -d) a.txt b.txt