使用sed

使用sed

我有一个文本文件,我想在其中搜索重复出现的新细胞系

New Cell
New Cell
3250,36, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,16.3, 0.0,16.4,20.1,21.8,23.3,25.2,26.4,27.4,26.9,26.4, 0.0, 0.0, 0.0, 0.0, 0.0,
3251,36, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,18.3,23.5,25.3,25.4,27.5,26.0,28.6,28.7,31.8,33.2,34.5,35.0,36.4,38.9,37.9,38.9,38.2,41.3, 0.0, 0.0, 0.0, 0.0, 0.0,
3251,37, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,19.1,21.9,18.0,22.7,21.2,25.3,26.4,29.8,30.3,30.9,31.4,32.3,32.4,31.2,31.3,30.0,27.6,28.1,28.4, 0.0, 0.0, 0.0, 0.0, 0.0,
3252,36, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,18.4,17.1,20.5,22.9,24.8,21.5,24.9,23.7,26.6,27.2,28.3,27.9,28.4,28.5,30.0,31.0,30.6,31.2,31.6,30.3, 0.0, 0.0, 0.0, 0.0, 0.0,
New Cell

我必须删除重复的行,同时保留原始的行。我的输出应该是这样的

New Cell
3250,36, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,16.3, 0.0,16.4,20.1,21.8,23.3,25.2,26.4,27.4,26.9,26.4, 0.0, 0.0, 0.0, 0.0, 0.0,
3251,36, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,18.3,23.5,25.3,25.4,27.5,26.0,28.6,28.7,31.8,33.2,34.5,35.0,36.4,38.9,37.9,38.9,38.2,41.3, 0.0, 0.0, 0.0, 0.0, 0.0,
3251,37, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,19.1,21.9,18.0,22.7,21.2,25.3,26.4,29.8,30.3,30.9,31.4,32.3,32.4,31.2,31.3,30.0,27.6,28.1,28.4, 0.0, 0.0, 0.0, 0.0, 0.0,
3252,36, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,18.4,17.1,20.5,22.9,24.8,21.5,24.9,23.7,26.6,27.2,28.3,27.9,28.4,28.5,30.0,31.0,30.6,31.2,31.6,30.3, 0.0, 0.0, 0.0, 0.0, 0.0,
New Cell

答案1

你需要uniq命令。它正是您所需要的。键入man uniq寻求帮助。

uniq «input-file» «output-file»

应该这样做。然而,这有时可能会破坏一些数字。

使用sed

使用 sed,我们可以说删除重复项,前提是匹配模式。

sed -r -e '$!N; /^(«test to remove duplicates of»)\n\1$/!P; D'

解释:

  • 在扩展正则表达式模式下运行 sed -r,表达式是下一个-e
  • 单引号'告诉 shell 不要解释它,只是将它传递给(到 sed)。
  • $!N如果不是文件的最后一行,则将其附加到模式空间。
  • ``;'是sed的命令分隔符
  • /^(«test to remove duplicates of»)\n\1$/
    • /regex/说要搜索什么。
    • ^以。。开始
    • (something)寻找并记住它的东西。
    • \n换行符。
    • \1我要求你记住的第一件事。
    • $结尾
    • !否定搜索。
    • P如果搜索匹配则打印。
    • D删除直到换行符并重复。

相关内容