入力:ソートされた行を持つファイル
出力:すべての数字を削除すると、ファイルに隣接する行に一致する「一意の」行が含まれます。
はい
入力する
abbylove2007
abbylove2008
abbylove2012
AbbyLove2014
abby1994lover
abby2007lover
abbylovesaal2018
abbylovesbsb2003
出力
abbylove2007
abby1994lover
abbylove\d+ と abby\d+lover に一致する複数の隣接行があるため、abbylove2007 と abby1994lover が残ります。
答え1
$ awk '{ curr=$0; gsub("[0-9]","",curr) } curr != prev { prev=curr; prevfull=$0; flag=0; next } !flag { print prevfull; flag=1 }' test
abbylove2007
abby1994lover
まず、現在の行から数字を削除します。数値を削除した後、この結果が前の行と異なる場合は、前の行をこの行に更新し、前の行全体を記憶し、変数をflag
0に設定してから次の行を続行します。
flag
この変数は、前の行と同じ行を出力するときに使用されます。最初これらのライン。
前の行と同じ行(番号の削除)の場合、フラグが設定されていない場合は、前の行全体を印刷してからフラグを設定します。
答え2
これは次の修正されたsedですuniq -d
。
sed '$!N; s/^\([^0-9]*\)\(.*\)\n\1[0-9].*$/\1\2/; t; D'