Shell
為連續分隔符列印帶有空列的表格
我通常用於
column
將輸入轉換為表格,例如:$ echo 'a\tb\tc\nd\te\tf' | column -t -s $'\t' a b c d e f
但是它會折疊空列,例如:
$ echo 'a\tb\tc\nd\t\tf' | column -t -s $'\t' a b c d f
而不是在有連續分隔符時列印空列。這就是我想要的,使用
column
或其他方式:a b c d f
如果您使用
GNU column
:-n
預設情況下,使用 -t 選項時,column 命令會將多個相鄰的分隔符合併為一個分隔符;此選項禁用該行為。此選項是 Debian GNU/Linux 擴展。
printf 'a\tb\tc\nd\t\tf\n' | column -t -n -s $'\t'
輸出:
a b c d f
如果
GNU column
不可用,您可以使用 sed-
在選項卡之間添加空格(或其他內容,例如 a ):printf 'a\tb\tc\nd\t\tf\n' | sed -e ':loop; s/\t\t/\t-\t/; t loop' | column -t -s $'\t'
對於那些沒有 GNU 列的人(例如 MacOS):請注意第一列和最後一列。如果第一列不是最長的,就會發生變化。腳本中的循環似乎不需要。我建議使用以下管道:
| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t
paste \ <(printf "a\nb\nc") \ <(printf "1\n2\n3\n4444\n5\n6") \ <(printf "d\ne\nf\ng\nh\ni\nj\nijkl\nk\nl") \ <(printf "X") \ \ | sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t
a 1 d X b 2 e - c 3 f - - 4444 g - - 5 h - - 6 i - - - j - - - ijkl - - - k - - - l -