www.
URLがまたはで始まる場合は、m.
その部分が存在しないか、ソートに関連していないと仮定して、ソートが実行されるようにファイルのURLリスト(URL /行1行)をソートしたいと思います。どんな提案がありますか?
はい
facebook.com###page
fahrrad.de###userlike-popup
m.facebook.com##.cx
www.facebook.com##body
www.fahrrad.de###userlike-footerbar
ソートされたファイルは次のとおりです。
www.facebook.com##body
m.facebook.com##.cx
facebook.com###page
www.fahrrad.de###userlike-footerbar
fahrrad.de###userlike-popup
説明する
facebook.com
fahrrad.de
h前のcよりも優先します。www.facebook.com##body
m.facebook.com##.cx
b
以前のように.
m.facebook.com##.cx
facebook.com###page
.
以前のように#
www.fahrrad.de###userlike-footerbar
fahrrad.de###userlike-popup
fよりpの前に来る
答え1
スキップしたい部分の後にいつでも文字を追加し、そこからソートを開始できます(その後、文字を削除)。
sed
そのオプションをサポートしている場合-E
(最新バージョンのGNUはsed
これを行い、以前のバージョンではなくこれを実行します-r
が、GNU以外の実装では移植性が低下します):
<file sed -E 's/^(www\.|m\.)?/&:/' | sort -t: -k2 | sed 's/://'
awk
または、以下を使用して同じことを実行できますperl
。
<file awk '{sub(/^(www\.|m\.)?/, "&:"); print}' | sort -t: -k2 | sed 's/://'
<file perl -pe 's/^(www\.|m\.)?/$&:/' | sort -t: -k2 | sed 's/://'
POSIXを使用しても、sed
いつでも次のことができます。
<file sed -e 's/^www\./&:/;t' -e 's/^m\./&:/;t' -e 's/^/:/' |
sort -t: -k2 | sed 's/://'
または.
、Norで始まらない行の先頭にを追加し、最初の部分の後に部分を並べ替えることもできます。www.
m.
.
<file sed -e '/^www\./b' -e '/^m\./!s/^/./' | sort -t. -k2 | sed 's/^\.//'
答え2
単独で使用perl
:
perl -e 'print sort {$a=~s/^(www|m)\.//r cmp $b=~s/^(www|m)\.//r} <>'
$a
カスタム比較を指定できる$b
Perlの特殊変数です。sort
s/^(www|m)\.//r
適用する前に、入力行から先頭www.
または部分を削除します。m.
sort
<>
この場合、入力行配列が提供されます。
シュワルツ変換変形:
perl -e 'print map { $_->[0] }
sort { $a->[1] cmp $b->[1] or $a->[0] cmp $b->[0] }
map { [$_, s/^(www|m)\.//r] } <>'
同様にruby
:
# can golf it to {_1.sub(/^(www|m)\./, "")} on latest version
ruby -e 'puts readlines.sort_by {|s| s.sub(/^(www|m)\./, "")}'
答え3
これを見てみましょう:
sed 's;^\([wm\.]*\)\(.*\)$;\2 \1\2;' file | sort | awk '{ print $2 }'