リストを特定の文字と並べ替えるには?

リストを特定の文字と並べ替えるには?

任意の文字を含むテキスト行を水平方向に並べ替えるために使用できる一連のコマンドまたはコマンドはありますか?たとえば、電子メールアドレスリストの場合、出力はすべての「@」文字が縦に並べられたテキストファイルを生成します。

成功するには、ほとんどの行の先頭に可変量のスペースを追加する必要があると思います。読むためにもっと努力が必要なので、別の列を望まない(例column -t -s "@" < file.txt:)。

今後:

[email protected]
[email protected]
[email protected]

後ろに:

   [email protected]
[email protected]
 [email protected]

つまり、文字をアンカーポイントとして指定し、周囲のテキストをそのアンカーポイントを中心に水平中央に配置できますか?マイユースケースは、視覚的なスキャンを簡単にするためのEメールアドレスです。

ベストアンサー1

最も簡単には、最初のフィールドを適切に広いフィールド幅で印刷できます。

awk -F@ 'BEGIN{OFS=FS} {$1 = sprintf("%12s", $1)} 1' file
         [email protected]
      [email protected]
       [email protected]

私が知る限り、特定の最大フィールド幅を仮定しない方法は、ファイルをメモリに保持するか、2回のパスを実行する必要があります。

おすすめ記事