このようなファイルがあります。
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
$3
bash
awk -F: '{printf "%-8s %-21s %s\n",$1,$2,$3}' file.txt
入力ファイルを使用すると、次のような出力が得られます。
AAA 111111 FIRSTLINE
BBBBBBB 22222222222 SECONDLINE
CCC 33333333333333333333 THIRD LINE