bash - 删除具有相似前缀的重复行

标签 bash awk sed duplicates

我需要删除具有重复前缀的文件中的相似行并保留唯一的行。

由此,

abc/def/ghi/
abc/def/ghi/jkl/one/
abc/def/ghi/jkl/two/
123/456/
123/456/789/
xyz/

对此

abc/def/ghi/jkl/one/
abc/def/ghi/jkl/two/
123/456/789/
xyz/

感谢任何建议,

最佳答案

在允许重新排序输出的情况下回答。

sort -r file | awk 'a!~"^"$0{a=$0;print}'
  1. sort -r file :以这种方式对行进行反向排序,具有相同模式的较长行将放在相同模式的较短行之前

  2. awk 'a!~"^"$0{a=$0;print}':解析排序后的输出,其中 a 保存前一行,$0 保存当前行

    • a!~"^"$0 检查每一行当前行是否不是上一行开头的子字符串。
    • 如果 $0 不是子字符串(即不是相似的前缀),我们打印它并将新字符串保存在 a 中(成为与下一行相比)

第一行$0不在a中,因为没有给a赋值(第一行总是打印)

关于bash - 删除具有相似前缀的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48656682/

相关文章:

bash - 使用 AWK 将文本文件中的每个单词换行

unix - 如何在 bash 中每隔一行的内容打印附加字符串?

regex - 使用 sed 时的多个条件

bash - 查找所有包含文本 "example.html"的文件并替换为 "example.php"仅当文件名中没有空格时才有效

string - 在 bash 的字符串中“揭示”隐藏/控制 'codes'

xcode - 使用 Xcode 构建后脚本创建 ZIP 存档

狂欢 : Check if file contains other file contents

linux - 如何删除包含重复单词的行?

ubuntu - 删除第 3 列的每个第 2 个单词一个文本

bash - 阿拉伯字符的 Redis 语法错误