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



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

我使用:

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(值)到键4(数字)的字段对/uniq进行排序。因此,调用uniq:时跳过字段1

cat file1 file2 |sort -k 2,4 |uniq --skip-fields=1 --unique

这样的东西可能对你有用:

% 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

相关内容

  • 没有找到相关文章

最新更新