【问题标题】:Shell - Remove duplicate ParagraphsShell - 删除重复的段落
【发布时间】:2021-10-01 00:55:56
【问题描述】:

我有一个 .sh 文件,里面有很多重复的释义。现在我需要删除这些重复项,只保留一个

例如

**startkeyword**
  today is good
  how are you
  apple
**endKeyword**
**startkeyword**
  today is good
  how are you
  apple
**endKeyword**
**startkeyword**
 do you like apple
 I like apple
**endKeyword**
**startkeyword**
  today is good
  how are you
**endKeyword**
**startkeyword**
  today is good
  how are you
  apple
**endKeyword**

结果应该是:

**startkeyword**
  today is good
  how are you
  apple
**endKeyword**
**startkeyword**
 do you like apple
 I like apple
**endKeyword**
**startkeyword**
  today is good
  how are you
**endKeyword**

如何在 .sh 文件中执行此操作?免费使用 sed、awk 或 tr

【问题讨论】:

  • 欢迎来到 Stack Overflow。 SO is a question and answer page for professional and enthusiast programmers。请在您的问题中添加您自己的代码。您应该至少展示自己为解决这个问题所做的研究。
  • 我不明白你在说什么。您可以使用awk '!visited[$0]++' filename.txt 它不会给出确切的输出,但会删除每个重复的行。
  • @Cyrus - 这个答案非常好,RS='' 的一个罕见例子(例如Multiple-Line Records)值得一票。尽管我根据问题中提供的代码示例来理解您的选择。

标签: shell awk


【解决方案1】:

如果您不介意删除星号 **

awk -v RS='[*][*]\n[*][*]' '{gsub(/[*]|\n$/,""); if(!visited[$0]++) print $0}' file

输出

startkeyword
  today is good
  how are you
  apple
endKeyword
startkeyword
 do you like apple
 I like apple
endKeyword
startkeyword
  today is good
  how are you
endKeyword

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多