これは私が持っているもう一つの問題ですvim
(これが私のブランドになっているようです)。デフォルトでは、次の形式の行で構成される非常に長いファイルがあります。
;07 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
;08 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
09 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
;10 :ANZ textv S9_1 9_1_K4_2 S9_3 S9_4 9_1_K4_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V4n E3
;11 :ANZ textv S9_1 9_1_K4_2 S9_3 S9_4 9_1_K4_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V4n E3
12 :ANZ textv S9_1 9_1_K4_2 S9_3 S9_4 9_1_K4_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V4n E3
13 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
;14 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
;15 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
ご覧のとおり、これらの行の列は誤ってソートされています。つまり、行が行と比較して間違って13
配置されています。ただし、ソートが難しい場合があります。たとえば、次のような行があります。14
15
;
;14 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
;15 :ANZ text S9_1 9_2_K1_2 S9_3 S9_4 9_2_K1_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10
それとも何でも想像できます。私が望むのは、各列の間に4つのスペースがあるようにすべての列を並べ替えることです。たとえば、;07-09
次のような行を作成したいと思います。
;07 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T1_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
;08 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T2_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
09 :ANZ textv S9_1 9_1_K3_2 S9_3 S9_4 9_1_K3_5 S9_T1_1 S9_T1_2 S9_T1_3 S9_T3_4 S9_T1_5 S9_T1_6 S9_T1_7 S9_T1_8 S9_T1_9 S9_T1_10 9_V3n E3
vim
これを効率的に行う方法はありますか?
答え1
command
モードで以下を実行します。
:%!column -t
しかし、これは最初の列をソートしません。使用する必要があります調整高度なオプションのためのプラグイン。
または、以下を使用せずにvim
フォーマットすることもできますperl
。
perl -anle 'BEGIN{$"="\t"} $F[0] = sprintf("%3s", $F[0]);print "@{[@F]}"' file
$"
必要な区切り記号に設定してください。