如何从文本文件中删除所有无序行?

Glu*_*ate 5 bash sed awk text-processing

概述

考虑一个散布着无序元素的有序列表,例如:

Alligator
Ant
Falcon <--
Baboon
Badger    
Armadillo <--
Caiman
Cat
Run Code Online (Sandbox Code Playgroud)

如何处理此列表以删除所有无序元素?例如:

Alligator
Ant
Baboon
Badger    
Caiman
Cat
Run Code Online (Sandbox Code Playgroud)

更多信息

无序元素总是单数,有序元素以至少 2 行为一组出现。一般模式是:

ordered
ordered
ordered
unordered <--
ordered
ordered
unordered <--
ordered
ordered
Run Code Online (Sandbox Code Playgroud)

无序元素可以更低......

A
B
F <---
D
E
Run Code Online (Sandbox Code Playgroud)

...并且高于以下有序元素:

A
C
B <---
D
E
Run Code Online (Sandbox Code Playgroud)

更困难的是:元素可以是大写和小写,并包含变音符号(例如:ä,ö,à)。


有没有办法用bash来完成这个?

Hau*_*ing 5

如果最后一行没问题,这会起作用:

awk 'BEGIN {IGNORECASE=1}; NR==1 {lastline=$0; next;}; {if($0>lastline) {print lastline; '\
'lastline2=lastline; lastline=$0;} else if ($0>lastline2) lastline=$0; }; '\
'END {print lastline;}' file1.txt
Run Code Online (Sandbox Code Playgroud)

旧版本(有错误,用于比较)

awk 'BEGIN {IGNORECASE=1}; NR==1 {lastline=$0; next;}; '\
'{if($0>lastline) print lastline; lastline=$0;}; END {print lastline;}' file
Run Code Online (Sandbox Code Playgroud)

  • 这把 bcade 变成了 bade (2认同)