
我通常用來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
答案1
如果您使用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
如果不可用,您可以使用 sed在選項卡之間GNU column
新增空格(或其他內容,例如 a ):-
printf 'a\tb\tc\nd\t\tf\n' | sed -e ':loop; s/\t\t/\t-\t/; t loop' | column -t -s $'\t'
答案2
我在我的列命令版本中找不到 -n 選項,因此使用 sed 修復了它:
echo -e 'a\tb\tc\nd\t\tf' | sed 's/\t\t/\t \t/'| column -t -s $'\t'
答案3
對於沒有 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 -