Awk 删除根据模式解释的重复项失败

Awk 删除根据模式解释的重复项失败,awk,sed,Awk,Sed,我对这些awk sed脚本有一些问题 sed -E 's/(^[a-zA-Z]+)([[:space:]]+[a-zA-Z]+){0,1}.*/\1\2/' file1.txt | sort | uniq > zz.txt 或其他同等软件(windows GNU) linux的另一个例子是 sed -E 's/\s+\S+\s+[0-9]\S+$|[0-9].*//;s/(\S+\s+\S+)\s+\S+$/\1/ H;x;s/((\n[^\n]*)(\n[^\n]*)*

我对这些awk sed脚本有一些问题

sed -E 's/(^[a-zA-Z]+)([[:space:]]+[a-zA-Z]+){0,1}.*/\1\2/' file1.txt | sort | uniq > zz.txt
或其他同等软件(windows GNU)

linux的另一个例子是

sed -E 's/\s+\S+\s+[0-9]\S+$|[0-9].*//;s/(\S+\s+\S+)\s+\S+$/\1/
        H;x;s/((\n[^\n]*)(\n[^\n]*)*)\2$/\1/;x;$!d;x;s/.//' file
这些脚本做什么?得到一份这样的清单

Chi Allegati N.22021.htm
Casabella Marzo 2021.pdf
Casabella Febbraio 2021.pdf
Chi Allegati N.22021.pdf
使用sed/awk脚本后,您将获得此输出

Casabella
Chi Allegati
A porte chiuse
A porte chiuse special
那么问题在哪里呢?好的,现在考虑另一个列表

(Ebook ITA Fumetti) Genius 021 Bersaglio A Gog.cbr
(Ebook ITA Fumetti) Genius 022 Poker Di Delitti.cbr

Corna Vissute - La moglie del ladro.cbz
Corna vissute - Nuova serie 011 - Un'offerta irresistibile.cbr

Il piccolo sceriffo 20 (Dardo 1992-02) [c2c CapitanUltra].cbz
Il piccolo sceriffo 23 (Dardo 1992-05) [c2c dinofelix].cbr

Il mondo di Arkadi - Caza 01 - Gli occhi di Or'Fe (by aquila & Janesek).cbr
Il mondo di Arkadi - Caza 02 - Il grande esterno (by aquila & Janesek).cbr

Il segno di Zorro 21 (Edizioni del fanciullo 9-1976)(BYPico57).cbr
Il segno di Zorro Serie d'oro 07 - Il mistero della miniera (Edizioni del fanciullo 1975-10-01) [c2c Dinofelix].cbr

L'Uomo Mascherato 06 - Il ratto di diana (Nerbini 1938-09) [c2c Scaricatore17-Gitra].cbr
L'Uomo Mascherato 08 - Il ritorno di Diana (Nerbini 1940-10) [c2c Scaricatore17-Gitra].cbr

Le leggende di Batman 017 (Play Press 1997-12 c2c) By Samox.cbz
Le leggende di Batman 018 (Planeta 1998-01 c2c) [Play Press] By Samox.cbz
不幸的是,脚本不再有效。事实上,我希望获得这个输出(或非常接近的输出),但这是不可能的

    Corna Vissute
    Genius
    Il mondo di Arkadi
    Il piccolo sceriffo
    Il segno di Zorro
    Il segno di Zorro Serie d'oro
    L'Uomo Mascherato
    Le leggende di Batman
脚本背后的逻辑:

  • 操纵该行以仅包含所需的字段。
  • 附加到保留空间。
  • 交换到保留空间,删除重复的行并交换回图案空间。
  • 删除除最后一行以外的所有行。
  • 在最后一行,切换到保留空间,删除第一个换行符并打印结果。
  • 编辑:添加另一个脚本处理错误的示例

    我有这个清单

    A porte chiuse 054 - Come la prima notte (Ediperiodici 1985-11) [noc2c Charles].cbr
    A porte chiuse 097 - Il demone nella bottiglia (Ediperiodici 1989-06) [c2c noedit Charless].cbr
    A Porte Chiuse 138-139 - Una viziosa incallita.cbr
    A porte chiuse Special 13 - Il primo amore-Il viziaccio [228pag] (Ediperiodici 1986-03) [c2c Charles-Edit Gitra].cbr
    A Porte Chiuse Special 020 [Fumetti.Erotici](1400~).cbz
    
    但我只期望这个结果

    Casabella
    Chi Allegati
    
    A porte chiuse
    A porte chiuse special
    
    但是脚本返回这个

    A Porte
    A porte
    
    编辑:另一个问题:我有

    Il destino di Kakugo - vol 09 (MANGA ITA)(Scan & Edit by DDT)(DDT0580)(MQ jpg).cbr
    Il mensile di Barbapap… N. 02 - [A.Mondadori] [1977-01] [ITA][c2c](no pagina centrale).cbz
    
    但它会回报我

    il
    Il destino di Kakugo
    Il mensile di Barbapap
    
    Y
    Y L'ultimo Uomo
    Yiu
    
    或者我有

    Y L'Ultimo Uomo.-.Ragazze vol 07.-.(Magic Press)(c2c aquila).cbr
    Y L'ultimo Uomo [08] Bambole Di Carta (Magic Press)(c2C Aquila).cbr
    Yiu 01 - Inferno.cbr
    Yiu 03 - Assassini (Scanlation, Ita, By Eleinad For Lc22Db).cbr
    
    但它会回报我

    il
    Il destino di Kakugo
    Il mensile di Barbapap
    
    Y
    Y L'ultimo Uomo
    Yiu
    
    但我想

    Il destino di Kakugo
    Il mensile di Barbapap
    Y L'ultimo Uomo
    Yiu
    

    我上次回答中修改的
    awk
    脚本应该适合您:

    awk'{sub(/^\([^)]+\)*/,“”)匹配($0,/^[a-zA-Z][a-zA-Z\047]*(+[a-zA-Z\047]+)*/){s=substr($0,1,RLENGTH);unq[tolower(s)]=s}END{for(在unq中的i)打印unq[i]}file.txt
    佐罗世界杯
    洛莫·马斯切拉托
    阿尔卡迪世界报
    短笛短笛
    蝙蝠侠莱根德酒店
    粘角
    伊尔塞格诺迪佐罗酒店
    天才
    
    更具可读性的版本:

    awk'
    {sub(/^\([^)]+\)*/,“”)}
    匹配($0,/^[a-zA-Z][a-zA-Z\047]*(+[a-zA-Z\047]+)*/){
    s=substr($0,1,RLENGTH)
    unq[tolower(s)]=s
    }
    结束{
    (我在unq)
    打印unq[i]
    }'file.txt
    
    我上次回答中修改的
    awk
    脚本应该适合您:

    awk'{sub(/^\([^)]+\)*/,“”)匹配($0,/^[a-zA-Z][a-zA-Z\047]*(+[a-zA-Z\047]+)*/){s=substr($0,1,RLENGTH);unq[tolower(s)]=s}END{for(在unq中的i)打印unq[i]}file.txt
    佐罗世界杯
    洛莫·马斯切拉托
    阿尔卡迪世界报
    短笛短笛
    蝙蝠侠莱根德酒店
    粘角
    伊尔塞格诺迪佐罗酒店
    天才
    
    更具可读性的版本:

    awk'
    {sub(/^\([^)]+\)*/,“”)}
    匹配($0,/^[a-zA-Z][a-zA-Z\047]*(+[a-zA-Z\047]+)*/){
    s=substr($0,1,RLENGTH)
    unq[tolower(s)]=s
    }
    结束{
    (我在unq)
    打印unq[i]
    }'file.txt
    
    以下是一个sed替代方案:

    sed -E 's/(^[^0-9\-\.\[\…\-]* ?).*/\1/' input | sort -u
    

    以下是一个sed替代方案:

    sed -E 's/(^[^0-9\-\.\[\…\-]* ?).*/\1/' input | sort -u
    

    第二个输入文件格式与第一个简单的示例大不相同,没有明确的模式,除非我使用大脑而不是程序(例如,比较
    (电子书ITA Fumetti)Genius
    输入行与
    30 Giorni\u di\u Notte\u
    输入行)。我们如何区分它们?在想要的输出中存在潜在问题:
    Il mondo di Arkadi
    出现两次,
    Grandi eroi
    不存在。一种解决方案是,取连续行之间的共同点,但即使这样也不能完全满足您的需求。@LudovicKuty是的,您是对的,我从示例列表中删除了
    30_Giorni_Notte
    Grandi eroi
    。现在能容易些吗
    Il mondo di Arkadi
    它出现了两次,因为我在复制时犯了一个错误,很抱歉,上面的解决方案取决于几个部分的融合-单个部分中的任何错误都会影响最终的解决方案。根据您上面的评论,确定每一行中可以匹配的重复元素是最终解决方案的内在要求。一旦解决方案的这一部分是正确的,其余部分将遵循。再看一下列表中的第一项。第二个输入文件格式与第一个简单示例差别很大,没有明确的模式,除非我用大脑而不是程序(例如,比较
    (电子书ITA Fumetti)Genius
    输入行与
    30 Giorni_di_Notte
    输入行)。我们如何区分它们?在想要的输出中存在潜在问题:
    Il mondo di Arkadi
    出现两次,
    Grandi eroi
    不存在。一种解决方案是,取连续行之间的共同点,但即使这样也不能完全满足您的需求。@LudovicKuty是的,您是对的,我从示例列表中删除了
    30_Giorni_Notte
    Grandi eroi
    。现在能容易些吗
    Il mondo di Arkadi
    它出现了两次,因为我在复制时犯了一个错误,很抱歉,上面的解决方案取决于几个部分的融合-单个部分中的任何错误都会影响最终的解决方案。根据您上面的评论,确定每一行中可以匹配的重复元素是最终解决方案的内在要求。一旦解决方案的这一部分是正确的,其余部分将遵循。请再看一看你名单上的第一项。是的,谢谢,非常好,但除了一件事,请看这里:-如果我有《卡库戈的命运》第09卷(马…,《巴尔巴帕的男人》第02页-[A.它返回我
    il
    il destino di Kakugo
    ,和
    il mensile di Barbapap
    。但是我不需要在列表中也包含
    il
    。是的,我测试了,它工作正常。谢谢!是的,谢谢,非常好,但除了一件事,请看这里:-如果我有
    il destino di Kakugo-vol 09(MA…
    巴尔巴巴普男子监狱…N.02-[A.
    它返回我
    Il
    Il destino di Kakugo
    ,和
    Il mensile di Barbapap
    。但是我不需要在列表中也包含
    Il
    。是的,我测试了,它工作正常。谢谢!