Linux

在保持對齊的同時並排合併兩個 ASCII 藝術文件的正確方法是什麼?

  • October 1, 2021

藝術文件(cat -A輸出):

.::""-,                      .::""-.$
/::     \                    /::     \$
|::     |   _..--""""--.._   |::     |$
'\:.__ /  .'              '.  \:.__ /$
||____|.' _..---"````'---. '.||____|$
||:.  |_.'                `'.||:.  |$
||:.-'`       .-----.        ';:.  |$
||/         .'       '.        \.  |$
||         / '-.   '. \\       |.  |$
||:.     _| '   \_\_\\/(        \  |$
||:.\_.-' )     ||   m `\.--._.-""-;$
||:.(_ . '\ __'// m ^_/ /    '.   _.`.$
||:.  \__^/` _)```'-...'   _ .-'.'    '-.$
||:..-'__  .'        '. . '      '.      `'.$
||:(_.' .`'        _. ' '-.         '.   . ''-._$
||:. :   '.     .'          '.  . ' ' '.`       '._$
||:.  :    '. .'     .::""-: .''.        ' .   . ' ':::''-.$
||:. .'    ..' .    /::     \    '.        . '.    /::     \$
||:.'    .'      '. |::     |    _.:---""---.._'   |::     |$
||.      :          '\:.__ /   .'    -.  .-    '.   \:.__ /$
||:     : '.       . ||____|_.'    .--.  .--.    '._||____|$
||:'.___:   '.   .'  ||:.  |      (    \/    )      ||:.  |$
||:___| \     '. :   ||:.  |       '-.    .-'       ||:.  |$
[[____]  '.     '.-._||:.  |      __  '..'  __      ||:.  |$
           '.    :   ||:.  |     (__\ (\/) /__)     ||:.  |$
             '.  :   ||:.  |        `  \/  `        ||:.  |$
               '-:   ||:.  |           ()           ||:.  |$
                  '._||:.  |________________________||:.  |$
                     ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___|$
                     [[____]                        [[____]$

標題文件(cat -A輸出):

$
$
 _________                     .__          $
/   _____/____    _____ ______ |  |   ____  $
\_____  \\__  \  /     \\____ \|  | _/ __ \ $
/        \/ __ \|  Y Y  \  |_> >  |_\  ___/ $
/_______  (____  /__|_|  /   __/|____/\___  >$
       \/     \/      \/|__|             \/ $
___________              __                  $
\__    ___/___ ___  ____/  |_                $
 |    |_/ __ \\  \/  /\   __\               $
 |    |\  ___/ >    <  |  |                 $
 |____| \___  >__/\_ \ |__|                 $
            \/      \/                      $
$
$

我正在嘗試將 art_file 與 caption_file 並排合併。到目前為止,我嘗試了兩種方法:

  1. 使用pr -Jmt art_file caption_file
 .::""-,                      .::""-.
/::     \                    /::     \
|::     |   _..--""""--.._   |::     |        _________                        .__
'\:.__ /  .'              '.  \:.__ /        /   _____/____    _____ ______ |  |     ____
 ||____|.' _..---"````'---. '.||____|        \_____  \\__    \  /     \\____ \|  | _/ __ \
 ||:.  |_.'                `'.||:.  |        /          \/ __ \|  Y Y  \  |_> >  |_\  ___/
 ||:.-'`       .-----.        ';:.  |       /_______  (____  /__|_|  /   __/|____/\___  >
 ||/         .'       '.        \.  |                 \/     \/      \/|__|             \/
 ||         / '-.   '. \\       |.  |       ___________                __
 ||:.     _| '   \_\_\\/(        \  |       \__      ___/___ ___  ____/  |_
 ||:.\_.-' )     ||   m `\.--._.-""-;         |      |_/ __ \\  \/  /\   __\
 ||:.(_ . '\ __'// m ^_/ /    '.   _.`.       |        |\  ___/ >    <  |  |
 ||:.  \__^/` _)```'-...'   _ .-'.'    '-.           |____| \___  >__/\_ \ |__|
 ||:..-'__  .'        '. . '      '.      `'.                      \/      \/
 ||:(_.' .`'        _. ' '-.         '.   . ''-._
 ||:. :   '.     .'          '.  . ' ' '.`       '._
 ||:.  :    '. .'     .::""-: .''.        ' .   . ' ':::''-.
 ||:. .'    ..' .    /::     \    '.        . '.    /::     \
 ||:.'    .'      '. |::     |    _.:---""---.._'   |::     |
 ||.      :          '\:.__ /   .'    -.  .-    '.   \:.__ /
 ||:     : '.       . ||____|_.'    .--.  .--.    '._||____|
 ||:'.___:   '.   .'  ||:.  |      (    \/    )      ||:.  |
 ||:___| \     '. :   ||:.  |       '-.    .-'       ||:.  |
 [[____]  '.     '.-._||:.  |      __  '..'  __      ||:.  |
            '.    :   ||:.  |     (__\ (\/) /__)     ||:.  |
              '.  :   ||:.  |        `  \/  `        ||:.  |
                '-:   ||:.  |           ()           ||:.  |
                   '._||:.  |________________________||:.  |
                      ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___|
                      [[____]                        [[____]
  1. paste art_file caption_file
 .::""-,                      .::""-.
/::     \                    /::     \
|::     |   _..--""""--.._   |::     |        _________                     .__
'\:.__ /  .'              '.  \:.__ /        /   _____/____    _____ ______ |  |   ____
 ||____|.' _..---"````'---. '.||____|        \_____  \\__  \  /     \\____ \|  | _/ __ \
 ||:.  |_.'                `'.||:.  |        /        \/ __ \|  Y Y  \  |_> >  |_\  ___/
 ||:.-'`       .-----.        ';:.  |       /_______  (____  /__|_|  /   __/|____/\___  >
 ||/         .'       '.        \.  |               \/     \/      \/|__|             \/
 ||         / '-.   '. \\       |.  |       ___________              __
 ||:.     _| '   \_\_\\/(        \  |       \__    ___/___ ___  ____/  |_
 ||:.\_.-' )     ||   m `\.--._.-""-;         |    |_/ __ \\  \/  /\   __\
 ||:.(_ . '\ __'// m ^_/ /    '.   _.`.       |    |\  ___/ >    <  |  |
 ||:.  \__^/` _)```'-...'   _ .-'.'    '-.    |____| \___  >__/\_ \ |__|
 ||:..-'__  .'        '. . '      '.      `'.                    \/      \/
 ||:(_.' .`'        _. ' '-.         '.   . ''-._
 ||:. :   '.     .'          '.  . ' ' '.`       '._
 ||:.  :    '. .'     .::""-: .''.        ' .   . ' ':::''-.
 ||:. .'    ..' .    /::     \    '.        . '.    /::     \
 ||:.'    .'      '. |::     |    _.:---""---.._'   |::     |
 ||.      :          '\:.__ /   .'    -.  .-    '.   \:.__ /
 ||:     : '.       . ||____|_.'    .--.  .--.    '._||____|
 ||:'.___:   '.   .'  ||:.  |      (    \/    )      ||:.  |
 ||:___| \     '. :   ||:.  |       '-.    .-'       ||:.  |
 [[____]  '.     '.-._||:.  |      __  '..'  __      ||:.  |
            '.    :   ||:.  |     (__\ (\/) /__)     ||:.  |
              '.  :   ||:.  |        `  \/  `        ||:.  |
                '-:   ||:.  |           ()           ||:.  |
                   '._||:.  |________________________||:.  |
                      ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___|
                      [[____]                        [[____]

它們都弄亂了第二個文件的對齊方式,粘貼產生了更好的輸出。所以我的問題是:

  1. 使用或者pastepr可以生成所需的輸出?也許我忽略了一些選項?
  2. 如果它們都不是工作的正確工具,除了編寫一個新程序之外,我可以使用哪些預先存在的解決方案?

問題是每條線都有不同的長度。最簡單的解決方案是為 提供足夠大的寬度pr

pr -mtw 150 art_file caption_file

如果您希望標題文本更接近,我建議

awk '
 l<length && NR<=n{l=length}
 NR!=FNR{
   printf "%-"l"s", $0
   getline line < "caption"
   print line
 }
' n="$(wc -l < caption)" art art
  • n是字幕文件的行數。
  • l``n是藝術文件第一行之間的最長行的長度。
  • printf用空格右填充藝術文件,使其所有行都有l長度。
  • getline然後從標題文件中獲取一行並將其列印在剛剛列印的藝術行旁邊。

請注意,您可以添加或減去 in 的值lprintf臨時調整間距。

.::""-,                      .::""-.
/::     \                    /::     \
|::     |   _..--""""--.._   |::     |                _________                     .__
'\:.__ /  .'              '.  \:.__ /                /   _____/____    _____ ______ |  |   ____
||____|.' _..---"````'---. '.||____|                \_____  \\__  \  /     \\____ \|  | _/ __ \
||:.  |_.'                `'.||:.  |                /        \/ __ \|  Y Y  \  |_> >  |_\  ___/
||:.-'`       .-----.        ';:.  |               /_______  (____  /__|_|  /   __/|____/\___  >
||/         .'       '.        \.  |                       \/     \/      \/|__|             \/
||         / '-.   '. \\       |.  |               ___________              __
||:.     _| '   \_\_\\/(        \  |               \__    ___/___ ___  ____/  |_
||:.\_.-' )     ||   m `\.--._.-""-;                 |    |_/ __ \\  \/  /\   __\
||:.(_ . '\ __'// m ^_/ /    '.   _.`.               |    |\  ___/ >    <  |  |
||:.  \__^/` _)```'-...'   _ .-'.'    '-.            |____| \___  >__/\_ \ |__|
||:..-'__  .'        '. . '      '.      `'.                    \/      \/
||:(_.' .`'        _. ' '-.         '.   . ''-._
||:. :   '.     .'          '.  . ' ' '.`       '._
||:.  :    '. .'     .::""-: .''.        ' .   . ' ':::''-.
||:. .'    ..' .    /::     \    '.        . '.    /::     \
||:.'    .'      '. |::     |    _.:---""---.._'   |::     |
||.      :          '\:.__ /   .'    -.  .-    '.   \:.__ /
||:     : '.       . ||____|_.'    .--.  .--.    '._||____|
||:'.___:   '.   .'  ||:.  |      (    \/    )      ||:.  |
||:___| \     '. :   ||:.  |       '-.    .-'       ||:.  |
[[____]  '.     '.-._||:.  |      __  '..'  __      ||:.  |
           '.    :   ||:.  |     (__\ (\/) /__)     ||:.  |
             '.  :   ||:.  |        `  \/  `        ||:.  |
               '-:   ||:.  |           ()           ||:.  |
                  '._||:.  |________________________||:.  |
                     ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___|
                     [[____]                        [[____]

引用自:https://unix.stackexchange.com/questions/671216