trコマンドの無効な列形式

trコマンドの無効な列形式

このようなファイルがあります。

AAA:111111:FIRSTLINE
BBBBBBB:22222222222:SECONDLINE
CCC:33333333333333333333:THIRD LINE

各「:」をタブ文字に変更したいです。これにはtrコマンドを使用しました。

tr ":" "\t"

しかし、私はこれを得ました。

ABC     12345   FIRSTLINE
DEFGH   1112232 SECONDLINE
IJK     77623786487261  THIRD LINE

3列目の単語がすべて同じ場所から始まってほしいのですが、前の列の単語が長すぎる場合は、次の列の単語が私が望むものよりはるかに前方に移動するようです。この問題に対する迅速な解決策はありますか?

ありがとうございます。

答え1

この試み:

$ cat ex
AAA:111111:FIRSTLINE
BBBBBBB:22222222222:SECONDLINE
CCC:33333333333333333333:THIRD LINE

$ column --table --separator ':' ex
AAA      111111                FIRSTLINE
BBBBBBB  22222222222           SECONDLINE
CCC      33333333333333333333  THIRD LINE

このcolumnコマンドは、指定された区切り文字を使用してテーブルを生成します。

答え2

tr私が解決できるかどうかはわかりませんが、awk私はこの問題を解決するのにかなり上手です。

printfのコマンドは、のコマンドawkと非常によく似ていますC。書式文字列のマイナス記号を使用する%-8sと、出力は左揃えになります。

このスイッチは-F:フィールド区切り記号をに設定します:。これにより、awkが variabels に設定され、対応する区切り文字で区切られたテキストになります$1。解釈を試みたくない場合は、コマンドラインで一重引用符を使用してください。$2$3bash

awk -F: '{printf "%-8s %-21s %s\n",$1,$2,$3}' file.txt

入力ファイルを使用すると、次のような出力が得られます。

AAA      111111                FIRSTLINE
BBBBBBB  22222222222           SECONDLINE
CCC      33333333333333333333  THIRD LINE

関連情報