Bash
Bash - 在可變長度的線條後面畫一條垂直線
我有一個具有以下格式的文本文件,我想在這些行之後添加一條垂直線,然後增加數字:
c4-1 d e c c d e c e-2 f g2 e4 f g2 g8-4\( a-5 g f\) e4 c g'8\( a g f\) e4 c c-1 r c2 c4 r c2
我通過以下方式實現了行和編號
while-loop
:#!/bin/bash while read -r line; do if [ -z "$line" ]; then echo continue fi n=$((++n)) \ && grep -vE "^$|^%" <<< "$line" \ | sed 's/$/\ \|\ \%'$(("$n"))'/' done < file
並獲得如下輸出:
c4-1 d e c | %1 c d e c | %2 e-2 f g2 | %3 e4 f g2 | %4 g8-4\( a-5 g f\) e4 c | %5 g'8\( a g f\) e4 c | %6 c-1 r c2 | %7 c4 r c2 | %8
現在我希望添加垂直對齊並獲得如下輸出:
c4-1 d e c | %1 c d e c | %2 e-2 f g2 | %3 e4 f g2 | %4 g8-4\( a-5 g f\) e4 c | %5 g'8\( a g f\) e4 c | %6 c-1 r c2 | %7 c4 r c2 | %8
這意味著我需要以某種方式獲取最長行的行長(此處:21 個字元)和每行的行長並添加空格的差異,我該如何實現呢?
您可以列印沒有對齊的行,
column -t
並使用虛擬分隔符格式化輸出:#!/bin/bash while read -r line; do if [ -z "$line" ]; then echo continue fi printf '%s@| %%%s\n' "$line" "$((++n))" done < file | column -e -s'@' -t | sed 's/ |/|/'
在這裡,我在指示列的末尾
@
之前添加了一個 as 虛擬字元。|
最後的sed
命令用於在 . 之前刪除一個額外的空格字元|
。需要選項-e
以在輸出中保留空行。輸出:
c4-1 d e c | %1 c d e c | %2 e-2 f g2 | %3 e4 f g2 | %4 g8-4\( a-5 g f\) e4 c | %5 g'8\( a g f\) e4 c | %6 c-1 r c2 | %7 c4 r c2 | %8