अद्यतन : यहाँ एक बहुत सरल स्क्रिप्ट है (कि सवाल के अंत में एक) सारणीबद्ध आउटपुट के लिए। जैसा कि आप चाहते हैं, बस इसे फ़ाइल नाम दें paste
... यह html
फ्रेम बनाने के लिए उपयोग करता है, इसलिए यह tweakable है। यह कई स्थानों को संरक्षित करता है, और जब यह यूनिकोड वर्णों का सामना करता है तो कॉलम संरेखण संरक्षित होता है। हालांकि, जिस तरह से संपादक या दर्शक यूनिकोड को प्रस्तुत करते हैं वह पूरी तरह से एक और मामला है ...
┌──────────────────────┬────────────────┬──────────┬────────────────────────────┐
│ 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'
---
उत्तर (अब तक) में प्रस्तुत किए गए उपकरणों का एक सारांश ।
मैंने उन पर बहुत करीबी नज़र डाली है; यहाँ मैं क्या पाया है:
paste
# यह उपकरण अब तक प्रस्तुत सभी उत्तरों के लिए सामान्य है # यह कई फाइलों को संभाल सकता है; इसलिए कई कॉलम ... अच्छा! # यह प्रत्येक कॉलम को टैब के साथ परिसीमित करता है ... अच्छा। # इसका आउटपुट सारणीबद्ध नहीं है।
नीचे दिए गए सभी उपकरण इस सीमांकक को हटा देते हैं! ... यदि आपको एक सीमांकक की आवश्यकता है तो बुरा है।
column
# यह टैब सीमांकक को हटाता है, इसलिए फ़ील्ड आइडेंटिफ़टन विशुद्ध रूप से स्तंभों द्वारा होता है जिसे यह काफी अच्छी तरह से संभालता हुआ लगता है .. मुझे कुछ भी अटपटा नहीं लगा है ... # एक अद्वितीय सीमांकक नहीं होने के बावजूद, यह ठीक काम करता है!
expand
# केवल एक एकल टैब सेटिंग है, इसलिए यह 2 कॉलम से परे अप्रत्याशित है # यूनिकोड को संभालते समय स्तंभों का संरेखण सही नहीं है, और यह टैब सीमांकक को हटा देता है, इसलिए फ़ील्ड आइडेंटिटोन शुद्ध रूप से कॉलम संरेखण द्वारा होता है
pr
# केवल एक ही टैब सेटिंग है, इसलिए यह 2 कॉलम से परे अप्रत्याशित है। # यूनिकोड को संभालते समय स्तंभों का संरेखण सही नहीं है, और यह टैब सीमांकक को हटा देता है, इसलिए फ़ील्ड आइडेंटिफैटन शुद्ध रूप से स्तंभ संरेखण द्वारा होता है
मेरे लिए, column
यह एक लाइनर के रूप में स्पष्ट सबसे अच्छा विलेय है .. यह आप या तो सीमांकक चाहते हैं, या आपकी फ़ाइलों के एक ASCII- कला सारणी, पर पढ़ें, अन्यथा .. columns
बहुत सुंदर है अच्छा :) ...
यहाँ एक स्क्रिप्ट है जो किसी भी प्रकार की फाइलों को ले जाती है और एक ASCII- कला सारणीबद्ध प्रस्तुति बनाती है .. (ध्यान रखें कि यूनिकोड अपेक्षित चौड़ाई को प्रस्तुत नहीं कर सकता है, उदाहरण के लिए ௵ जो एक एकल वर्ण है। यह स्तंभ के लिए काफी भिन्न है। संख्या गलत है, जैसा कि ऊपर वर्णित कुछ उपयोगिताओं में मामला है।) ... स्क्रिप्ट का आउटपुट, नीचे दिखाया गया है, 4 इनपुट फ़ाइलों से है, जिसका नाम F1 F2 F3 F4 है ...
+------------------------+-------------------+-------------------+--------------+
| 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
यहाँ मेरा मूल उत्तर है (उपरोक्त लिपि के बदले थोड़ा सा छांटा गया है)
का उपयोग करते हुए wc
स्तंभ चौड़ाई प्राप्त करने के लिए, और sed
एक साथ सही पैड को दिखाई चरित्र .
तो (सिर्फ इस उदाहरण के लिए) ... और paste
एक साथ दो कॉलम शामिल होने के लिए टैब चार ...
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
यदि आप सही कॉलम को बाहर निकालना चाहते हैं:
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...........