awk/sed を使用して一部のメールアドレスを裏返しますか?

awk/sed を使用して一部のメールアドレスを裏返しますか?

まず、ドメインごとに並べ替えたいメールアドレスの長いリストがあるので、次のような行を選択したいと思います。

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

注:awkarray_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

おすすめ記事