まず、ドメインごとに並べ替えたいメールアドレスの長いリストがあるので、次のような行を選択したいと思います。
email: [email protected]
email: [email protected]
そしてこれを得ました:
ru.yandex email: [email protected]
com.changeip.josephay905s email: [email protected]
どうすればいいですか?
以下は、より大きなデータセットです。
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
ベストアンサー1
努力する:
awk -F'@' '
{ split($2, flip, ".");
for (i=length(flip); i>=1; i--) printf flip[i] (i!=1?".":" ");
print $0;
}' infile
@
フィールド区切り文字として定義-F'@'
- ドット区切り文字の2番目のフィールドを
.
次の配列に分割します。flip
- 配列の要素を最後から最初に繰り返し、各要素を印刷してから
.
(最初の要素を除く)、行全体を印刷します$0
。
注:awk
array_lengthはサポートされていません(参照)AWK - 配列のストレージまたはインデックスを計算する方法)、次のアプローチを試してください。まず、配列が使用する要素の数を見つけ、forループで最大値として使用します。たとえば、次のようになります。
awk -F'@' '
{ split($2, flip, ".");
max=i=0; for (elements in flip) max++;
for (i=max; i>=1; i--) printf flip[i] (i!=1?".":" ");
print $0;
}' infile