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

  • 本文关键字:失败 解释 模式 删除 awk sed
  • 更新时间 :
  • 英文 :


我对这些笨拙的脚本有一些问题

sed -E 's/(^[a-zA-Z]+)([[:space:]]+[a-zA-Z]+){0,1}.*/12/' file1.txt | sort | uniq > zz.txt

或其他等效物(Windows GNU)

awk "match($0, /^[a-zA-Z]+( +[a-zA-Z]+)?/) {unq[substr($0, 1, RLENGTH)]} END {for (i in unq) print i}" file.txt > ZZ.txt

或者另一个 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

那么问题出在哪里呢?好的,现在考虑另一个列表

(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

脚本背后的逻辑:

  1. 操作该行以仅包含必填字段。
  2. 追加到保留空间。
  3. 交换
  4. 到保留空间,删除重复的行并交换回模式空间。
  5. 删除除最后一行之外的所有内容。
  6. 在最后一行,交换到保留空间,删除第一个换行符并打印结果。

编辑:添加另一个脚本处理不正确的示例

我有这个列表

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

但我只期望这个输出

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 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

但它让我回来

Y
Y L'ultimo Uomo
Yiu

但我期待

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

这个修改后的awk脚本来自我上一个答案应该适合你:

awk '{sub(/^([^)]+) */, "")} match($0, /^[a-zA-Z][a-zA-Z47]*( +[a-zA-Z47]+)*/) {s = substr($0, 1, RLENGTH); unq[tolower(s)]=s} END {for (i in unq) print unq[i]}' file.txt
Il segno di Zorro Serie d'oro
L'Uomo Mascherato
Il mondo di Arkadi
Il piccolo sceriffo
Le leggende di Batman
Corna vissute
Il segno di Zorro
Genius

更具可读性的版本:

awk '
{sub(/^([^)]+) */, "")}
match($0, /^[a-zA-Z][a-zA-Z47]*( +[a-zA-Z47]+)*/) {
s = substr($0, 1, RLENGTH)
unq[tolower(s)] = s
}
END {
for (i in unq)
print unq[i]
}' file.txt

这是一个 sed 替代方案:

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

最新更新