在保持对齐的同时并排合并两个 ASCII 艺术文件的正确方法是什么?

在保持对齐的同时并排合并两个 ASCII 艺术文件的正确方法是什么?

艺术文件(cat -A输出):

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

标题文件(cat -A输出):

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

我正在尝试将 art_file 与 Caption_file 并排合并。到目前为止我已经尝试了两种方法:

  1. 使用pr -Jmt art_file caption_file

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

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

它们都弄乱了第二个文件的对齐方式,而粘贴会产生更好的输出。所以我的问题是:

  1. 使用paste或者pr我可以生成所需的输出吗?也许我忽略了一些选项?
  2. 如果它们都不是完成这项工作的正确工具,那么除了编写新程序之外,我还可以使用什么现有的解决方案?

答案1

问题是每条线的长度不同。最简单的解决方案是给予足够大的宽度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是字幕文件的行数。
  • ln是艺术文件第一行之间最长行的长度。
  • printf用空格右键填充艺术文件,使其所有行都有l长度。
  • getline然后从标题文件中获取一行并将其打印在刚刚打印的艺术行旁边。

l请注意,您可以添加或减去in的值printf来临时调整间距。

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

相关内容