使用awk格式化ls输出而不使用制表符?

tbc*_*ord 2 unix linux bash awk ls

我的问题可能看起来相当简单,我仍然是bash脚本的初学者,但是当我用awk打印时,我正在尝试格式化我的ls输出而不使用选项卡.

这是我正在运行的当前命令:

ls -al | sed 1d | awk '{print $1" ",$6" ", $7"\t", $9}'
Run Code Online (Sandbox Code Playgroud)

它打印出以下内容

drwx------  Feb  13     .
drwxr-xr-x  Feb  5      ..
-rw-r--r--  Jan  21     .alias
-rw-r--r--  Feb  13     .bash_history
-rw-r--r--  Jan  29     .bash_profile
-rw-r--r--  Jan  21     .bash_profile~
-rw-r--r--  Feb  13     .bashrc
-rw-r--r--  Jan  21     .bashrc~
drwxr-xr-x  Jan  3      csc135
drwxr-xr-x  Aug  13     csc136
drwxr-xr-x  Feb  9      csc235
drwxr-xr-x  Oct  19     csc237
drwxr-xr-x  Feb  18     csc310
drwxr-xr-x  Feb  6      csc325
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用空格:

ls -al | sed 1d | awk '{print $1"  ",$6" ", $7" ", $9}'
Run Code Online (Sandbox Code Playgroud)

打印以下(非常麻烦):

drwx------   Feb  13  .
drwxr-xr-x   Feb  5  ..
-rw-r--r--   Jan  21  .alias
-rw-r--r--   Feb  13  .bash_history
-rw-r--r--   Jan  29  .bash_profile
-rw-r--r--   Jan  21  .bash_profile~
-rw-r--r--   Feb  13  .bashrc
-rw-r--r--   Jan  21  .bashrc~
drwxr-xr-x   Jan  3  csc135
drwxr-xr-x   Aug  13  csc136
drwxr-xr-x   Feb  9  csc235
drwxr-xr-x   Oct  19  csc237
drwxr-xr-x   Feb  18  csc310
drwxr-xr-x   Feb  6  csc325
Run Code Online (Sandbox Code Playgroud)

有没有办法让它看起来更漂亮?

drwx------  Feb  13  .
drwxr-xr-x  Feb  5   ..
-rw-r--r--  Jan  21  .alias
-rw-r--r--  Feb  13  .bash_history
-rw-r--r--  Jan  29  .bash_profile
-rw-r--r--  Jan  21  .bash_profile~
-rw-r--r--  Feb  13  .bashrc
-rw-r--r--  Jan  21  .bashrc~
drwxr-xr-x  Jan  3   csc135
drwxr-xr-x  Aug  13  csc136
drwxr-xr-x  Feb  9   csc235
drwxr-xr-x  Oct  19  csc237
drwxr-xr-x  Feb  18  csc310
drwxr-xr-x  Feb  6   csc325
Run Code Online (Sandbox Code Playgroud)

key*_*ser 5

想到的一个自动选项是column:

$ ls -al | sed 1d | awk '{print $1,$6,$7,$9}' | column -t
drwxr-xr-x+  Feb  3   .
drwxrwxrwt+  Oct  9   ..
-rw-------   Feb  12  .bash_history
-rwxr-xr-x   Oct  9   .bash_profile
-rwxr-xr-x   Feb  3   .bashrc
drwx------+  Feb  2   .cache
-rwxr-xr-x   Oct  9   .inputrc
-rwxr-xr-x   Feb  14  .mkshrc
-rwxr-xr-x   Oct  9   .profile
drwxrwx---+  Dec  13  .ssh
Run Code Online (Sandbox Code Playgroud)

注意-t用于的标志column:

-t, - table确定输入包含的列数并创建表.默认情况下,列用空格分隔,或使用--output-separator选项提供的字符分隔.表输出对于漂亮打印很有用.

另一种方法是使用固定长度:

$ ls -al | sed 1d | awk '{printf "%-12s %-3s %-2s %s\n", $1,$6,$7,$9}'
drwxr-xr-x+  Feb 3  .
drwxrwxrwt+  Oct 9  ..
-rw-------   Feb 12 .bash_history
-rwxr-xr-x   Oct 9  .bash_profile
-rwxr-xr-x   Feb 3  .bashrc
drwx------+  Feb 2  .cache
-rwxr-xr-x   Oct 9  .inputrc
-rwxr-xr-x   Feb 14 .mkshrc
-rwxr-xr-x   Oct 9  .profile
drwxrwx---+  Dec 13 .ssh
Run Code Online (Sandbox Code Playgroud)

GNU Awk用户指南中还有另一个例子.