使用 Sed/Awk 提取该行的前三个唯一实例

Use Sed/Awk to extract first three unique instances of the line

我有一个包含 20000 个探测器的列表,有没有办法使用 sed/awk 为每个探测器提取前三个 lines/occurences?

Example of dataset:
    Probe1 A  GTTAGAGGAGGTGGAAGAGC
    Probe1 B  CTGAGGTCGGGACGGAGCAC
    Probe1 C  GATGTAGGCGGTTGGCGTGG
    Probe1 D  GTTGGCGAAGTCACATCTAG
    Probe1 E  CATGTCGCCGACTCCGTCGA
    Probe1 F  GTGATGTTCTGAGTACATAG

    Probe3 A  GATTGTAGGTTTCCTGCCAG
    Probe3 L  ACCCAGCCAGGGGAAAACCA
    Probe3 Z  GGAGATGTAGGCGGTTGGCG
    Probe3 Y  GGAGATGTAGGCCTTAAAAA
    Probe3 D  GATTGTAGGGGTCCTGCCAG

期望的输出:

Probe1 A  GTTAGAGGAGGTGGAAGAGC
Probe1 B  CTGAGGTCGGGACGGAGCAC
Probe1 C  GATGTAGGCGGTTGGCGTGG
Probe3 A  GATTGTAGGTTTCCTGCCAG
Probe3 L  ACCCAGCCAGGGGAAAACCA
Probe3 Z  GGAGATGTAGGCGGTTGGCG

此处无需使用 sed 或 awk(如果您想使用 Python)。除非我弄错了你的问题,否则应该这样做:

probes = [
"""Probe1 A  GTTAGAGGAGGTGGAAGAGC
Probe1 B  CTGAGGTCGGGACGGAGCAC
Probe1 C  GATGTAGGCGGTTGGCGTGG
Probe1 D  GTTGGCGAAGTCACATCTAG
Probe1 E  CATGTCGCCGACTCCGTCGA
Probe1 F  GTGATGTTCTGAGTACATAG""",
"""Probe3 A  GATTGTAGGTTTCCTGCCAG
Probe3 L  ACCCAGCCAGGGGAAAACCA
Probe3 Z  GGAGATGTAGGCGGTTGGCG
Probe3 Y  GGAGATGTAGGCCTTAAAAA
Probe3 D  GATTGTAGGGGTCCTGCCAG"""]

for probe in probes:
    for i, line in enumerate(probe.split("\n")):
        print(line)
        if i >= 2:
            break

awk 救援!

$ awk '++a[]<4' file

删除空行

$ awk '++a[]<4 && NF' file