この列を並べ替えようとしています。
super+t sticky toggle
super+Shift+space floating toggle
super+Shift+r restart
super+Shift+d mode $mode_launcher
super+Shift+c reload
super+r mode resize
super+Return i3-sensible-terminal
super+q kill
super+n Nautilus scratchpad show
super+m neomutt scratchpad show
super+minus scratchpad show
super+f fullscreen toggle
super+c bar mode toggle
super+button2 kill
super+alt+x systemctl -i suspend
super+alt+v cmus
super+alt+m neomutt
super+alt+c ~/bin/editinvim
super+alt+b ranger
試してみましawk
たが運がありませんでした。好ましい形式は次のとおりです。
super+Shift+d mode $mode_launcher
super+alt+c ~/bin/editinvim
super+alt+b ranger
答え1
または、このコマンドをcolumn -t
使用して列のテキストを書式設定することもできます。
column -t file
デフォルトの列区切り記号はです" "
。例では、行には複数のスペースがありますが、最初のスペースのみ列を区切ります。最初のスペースを「:」に置き換えて、区切り文字として使用できます。
$ sed 's/ /:/1' file | column -s ':' -t
super+t sticky toggle
super+Shift+space floating toggle
super+Shift+r restart
super+Shift+d mode $mode_launcher
...
答え2
適切に広いフィールドに左揃えの最初の列を再印刷できます。
$ awk '{$1 = sprintf("%-30s", $1)} 1' file
super+t sticky toggle
super+Shift+space floating toggle
super+Shift+r restart
super+Shift+d mode $mode_launcher
super+Shift+c reload
super+r mode resize
super+Return i3-sensible-terminal
super+q kill
super+n Nautilus scratchpad show
super+m neomutt scratchpad show
super+minus scratchpad show
super+f fullscreen toggle
super+c bar mode toggle
super+button2 kill
super+alt+x systemctl -i suspend
super+alt+v cmus
super+alt+m neomutt
super+alt+c ~/bin/editinvim
super+alt+b ranger
列 1 の長さに基づいて適切な幅を自動的に選択するには:
awk '
NR==FNR {w = length($1) > w ? length($1) : w; next}
{$1 = sprintf("%-*s", w+4, $1)}
1
' file file