【发布时间】:2021-04-05 23:53:12
【问题描述】:
我对这些 awk-sed 脚本有一些问题
sed -E 's/(^[a-zA-Z]+)([[:space:]]+[a-zA-Z]+){0,1}.*/\1\2/' 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
脚本背后的逻辑:
- 处理该行以仅包含所需的字段。
- 附加到保留空间。
- 切换到保留空间,删除重复行并切换回模式空间。
- 删除除最后一行以外的所有内容。
- 在最后一行,交换到保留空间,删除第一个换行符并打印结果。
编辑:添加另一个脚本处理不正确的示例
我有这份清单
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
【问题讨论】:
-
第二个输入文件格式与第一个简单示例大不相同,没有明确的模式,除非我使用我的大脑而不是程序(例如,比较
(Ebook ITA Fumetti) Genius输入行与30_Giorni_di_Notte_输入行) .我们如何区分它们?在想要的输出中存在潜在问题:Il mondo di Arkadi出现两次,Grandi eroi不存在。一种解决方案是采用连续行之间的共同点,但即使这样也不能完全满足您的需求。 -
@LudovicKuty 是的,你是对的,我从我的示例列表中删除了
30_Giorni_di_Notte和Grandi eroi。现在会不会容易些?Il mondo di Arkadi出现两次是因为我抄错了,不好意思 -
上述解决方案取决于多个部分的融合——单个部分中的任何错误都会影响最终解决方案。从上面的 cmets 中,识别可以匹配重复的每一行的元素是最终解决方案所固有的。一旦解决方案的这一部分是正确的,其余的将随之而来。再看看列表的第一项。