Güncelleme : Burada, tablo çıktısı için daha basit bir komut dosyası (sorgunun sonundaki kod). Sadece olduğu gibi kendisine dosya geçmek paste
... Bu kullanır html
çerçeve yapmak, bu yüzden tweakable olduğunu. Birden çok alanı korur ve sütun hizalaması unicode karakterlerle karşılaştığında korunur. Ancak, editörün veya izleyicinin unicode'u yaratma şekli tamamen başka bir konudur ...
┌──────────────────────┬────────────────┬──────────┬────────────────────────────┐
│ Languages │ Minimal │ Chomsky │ Unrestricted │
├──────────────────────┼────────────────┼──────────┼────────────────────────────┤
│ Recursive │ Turing machine │ Finite │ space indented │
├──────────────────────┼────────────────┼──────────┼────────────────────────────┤
│ Regular │ Grammars │ │ ➀ unicode may render oddly │
├──────────────────────┼────────────────┼──────────┼────────────────────────────┤
│ 1 2 3 4 spaces │ │ Symbol-& │ but the column count is ok │
├──────────────────────┼────────────────┼──────────┼────────────────────────────┤
│ │ │ │ Context │
└──────────────────────┴────────────────┴──────────┴────────────────────────────┘
#!/bin/bash
{ echo -e "<html>\n<table border=1 cellpadding=0 cellspacing=0>"
paste "$@" |sed -re 's#(.*)#\x09\1\x09#' -e 's#\x09# </pre></td>\n<td><pre> #g' -e 's#^ </pre></td>#<tr>#' -e 's#\n<td><pre> $#\n</tr>#'
echo -e "</table>\n</html>"
} |w3m -dump -T 'text/html'
---
(Şimdiye kadar) cevaplarda sunulan araçların bir özeti .
Onlara oldukça yakından baktım; İşte ne buldum:
paste
# Bu araç şu ana kadar sunulan tüm cevaplarda ortaktır. # Birden fazla dosyayı kullanabilir; bu nedenle birden fazla sütun ... İyi! # Her sütunu bir Sekme ile sınırlandırır ... Güzel. # Çıkışı tablo halinde değil.
Altındaki tüm aletler bu sınırlandırıcıyı kaldırır! ... Bir sınırlayıcıya ihtiyacınız varsa kötü.
column
# Sekme sınırlayıcısını kaldırır, bu nedenle alan tanımlaması yalnızca oldukça iyi işlediği görünen sütunlarla yapılır. Kötü bir şey görmedim ... # Benzersiz bir sınırlayıcıya sahip olmam dışında, iyi çalışıyor!
expand
# Yalnızca tek bir sekme ayarı vardır, bu nedenle 2 sütunun ötesinde tahmin edilemez. # Unicode kullanırken sütunların hizalanması doğru değildir ve Sekme sınırlayıcısını kaldırır, bu nedenle alan tanımlaması yalnızca sütun hizasına göredir
pr
# Yalnızca tek bir sekme ayarı vardır, bu nedenle 2 sütunun ötesinde tahmin edilemez. # Unicode ile çalışırken sütunların hizalaması doğru değildir ve Sekme sınırlayıcıyı kaldırır, bu nedenle alan tanımlaması yalnızca sütun hizalaması ile yapılır
Bana göre, column
tek bir astar olarak en iyi çözüm budur. İsterseniz sınırlayıcıyı ya da dosyalarınızın ASCII-sanat tasnifini istersiniz, okumaya devam edin, aksi halde .. columns
oldukça iyi.
Burada herhangi bir dosya numarası alan ve bir ASCII-sanat tablo halinde sunumu oluşturan bir betik vardır .. (Unicode'un beklenen genişliğe getiremeyebileceğini unutmayın, örn. A tek bir karakterdir. Bu sütuntan oldukça farklıdır. yukarıda belirtilen bazı yardımcı programlarda olduğu gibi, numaraların yanlış olması.) ... Komut dosyasının çıktısı, aşağıda gösterilen, F1 F2 F3 F4 ... adındaki 4 girdi dosyasındandır.
+------------------------+-------------------+-------------------+--------------+
| Languages | Minimal automaton | Chomsky hierarchy | Grammars |
| Recursively enumerable | Turing machine | Type-0 | Unrestricted |
| Regular | Finite | — | |
| Alphabet | | Symbol | |
| | | | Context |
+------------------------+-------------------+-------------------+--------------+
#!/bin/bash
# Note: The next line is for testing purposes only!
set F1 F2 F3 F4 # Simulate commandline filename args $1 $2 etc...
p=' ' # The pad character
# Get line and column stats
cc=${#@}; lmax= # Count of columns (== input files)
for c in $(seq 1 $cc) ;do # Filenames from the commandline
F[$c]="${!c}"
wc=($(wc -l -L <${F[$c]})) # File length and width of longest line
l[$c]=${wc[0]} # File length (per file)
L[$c]=${wc[1]} # Longest line (per file)
((lmax<${l[$c]})) && lmax=${l[$c]} # Length of longest file
done
# Determine line-count deficits of shorter files
for c in $(seq 1 $cc) ;do
((${l[$c]}<lmax)) && D[$c]=$((lmax-${l[$c]})) || D[$c]=0
done
# Build '\n' strings to cater for short-file deficits
for c in $(seq 1 $cc) ;do
for n in $(seq 1 ${D[$c]}) ;do
N[$c]=${N[$c]}$'\n'
done
done
# Build the command to suit the number of input files
source=$(mktemp)
>"$source" echo 'paste \'
for c in $(seq 1 $cc) ;do
((${L[$c]}==0)) && e="x" || e=":a -e \"s/^.{0,$((${L[$c]}-1))}$/&$p/;ta\""
>>"$source" echo '<(sed -re '"$e"' <(cat "${F['$c']}"; echo -n "${N['$c']}")) \'
done
# include the ASCII-art Table framework
>>"$source" echo ' | sed -e "s/.*/| & |/" -e "s/\t/ | /g" \' # Add vertical frame lines
>>"$source" echo ' | sed -re "1 {h;s/[^|]/-/g;s/\|/+/g;p;g}" \' # Add top and botom frame lines
>>"$source" echo ' -e "$ {p;s/[^|]/-/g;s/\|/+/g}"'
>>"$source" echo
# Run the code
source "$source"
rm "$source"
exit
İşte orjinal cevabım (yukarıdaki betiğin yerine biraz kırpılmış)
Kullanımı wc
Sütun genişliğini almak ve sed
bir sağ yastığa görünür karakteri .
(sadece bu örneğin) ... sonra paste
bir ile iki sütun katılmak için Sekme Char ...
paste <(sed -re :a -e 's/^.{1,'"$(($(wc -L <F1)-1))"'}$/&./;ta' F1) F2
# output (No trailing whitespace)
Languages............. Minimal automaton
Recursively enumerable Turing machine
Regular............... Finite
Sağ sütunu doldurmak istiyorsanız:
paste <( sed -re :a -e 's/^.{1,'"$(($(wc -L <F1)-1))"'}$/&./;ta' F1 ) \
<( sed -re :a -e 's/^.{1,'"$(($(wc -L <F2)-1))"'}$/&./;ta' F2 )
# output (With trailing whitespace)
Languages............. Minimal automaton
Recursively enumerable Turing machine...
Regular............... Finite...........