回答:
column -t -s '\t'
列\
とt
文字を分離します。
column -s \t
column -s t
バックスラッシュは、シェルによって引用演算子として解釈されるため、と同じです。
ここでは、実際のTAB文字を列に渡します。ksh93、zsh、bash、mksh、busybox shまたはFreeBSD shの場合:
column -ts $'\t'
またはCtrl-V Tab、シェルプロンプトで入力して実際のタブ文字を入力します(タブ文字はスペースのようなシェル構文のトークンセパレータであるため、引用符内またはバックスラッシュを前に付けます)、または使用します"$(printf '\t')"
(分割+グロブを無効にするために必要な二重引用符タブ文字としての演算子も、デフォルト値の$IFS
)にあります。
$'\t'
タブを区切り文字にします。しかしawk -F "\t"
、タブをawkの区切り文字として使用することはかなり確実です。なぜここでコラムではなく機能するのですか?
私は次を使用しました(テキストにが含まれていない場合のみ機能します|
):
cat myfile | tr '\t' '|' | column -t -s '|'
これは単にタブをパイプに置き換え、次にパイプのある列を区切り文字として使用します。
(これは、魚の殻の箱から出してすぐに使用できるステファンの答えに何も見られなかったためです。そうでなければ、ステファンの答えは良いようです。)
POSIXの場合$'...'
、ANSI-Cエスケープとして知られるが定義されていません。
代わりに、次を使用できます$(printf '\t')
。
column -t -s "$(printf '\t')"
$(printf '\011')
011
(10進数9の8進数表現)は水平タブ文字のANSIコードであるため、使用できます。
column -t -s "$(printf '\011')"
ただし、これがシェルバージョン間で一貫していない理由については、以下のStéphaneChazelasの解説を参照してください。
"$(printf '\t')"
、私の答えに示されているようなこの種の問題を回避する方が良いでしょう。$'...'
POSIX仕様の次のメジャーバージョンに含める予定であることに注意してください。
$(printf '\t')
POSIXですか?ありがとうございました!
column -t -s $'\t'
のbashが思うように見えたとして、'\t'
両方を意味\
してt
ますが、$'\t'
リテラルのタブを意味します。バッシュ悪臭