Linux
在保持對齊的同時並排合併兩個 ASCII 藝術文件的正確方法是什麼?
藝術文件(
cat -A
輸出):.::""-, .::""-.$ /:: \ /:: \$ |:: | _..--""""--.._ |:: |$ '\:.__ / .' '. \:.__ /$ ||____|.' _..---"````'---. '.||____|$ ||:. |_.' `'.||:. |$ ||:.-'` .-----. ';:. |$ ||/ .' '. \. |$ || / '-. '. \\ |. |$ ||:. _| ' \_\_\\/( \ |$ ||:.\_.-' ) || m `\.--._.-""-;$ ||:.(_ . '\ __'// m ^_/ / '. _.`.$ ||:. \__^/` _)```'-...' _ .-'.' '-.$ ||:..-'__ .' '. . ' '. `'.$ ||:(_.' .`' _. ' '-. '. . ''-._$ ||:. : '. .' '. . ' ' '.` '._$ ||:. : '. .' .::""-: .''. ' . . ' ':::''-.$ ||:. .' ..' . /:: \ '. . '. /:: \$ ||:.' .' '. |:: | _.:---""---.._' |:: |$ ||. : '\:.__ / .' -. .- '. \:.__ /$ ||: : '. . ||____|_.' .--. .--. '._||____|$ ||:'.___: '. .' ||:. | ( \/ ) ||:. |$ ||:___| \ '. : ||:. | '-. .-' ||:. |$ [[____] '. '.-._||:. | __ '..' __ ||:. |$ '. : ||:. | (__\ (\/) /__) ||:. |$ '. : ||:. | ` \/ ` ||:. |$ '-: ||:. | () ||:. |$ '._||:. |________________________||:. |$ ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___|$ [[____] [[____]$
標題文件(
cat -A
輸出):$ $ _________ .__ $ / _____/____ _____ ______ | | ____ $ \_____ \\__ \ / \\____ \| | _/ __ \ $ / \/ __ \| Y Y \ |_> > |_\ ___/ $ /_______ (____ /__|_| / __/|____/\___ >$ \/ \/ \/|__| \/ $ ___________ __ $ \__ ___/___ ___ ____/ |_ $ | |_/ __ \\ \/ /\ __\ $ | |\ ___/ > < | | $ |____| \___ >__/\_ \ |__| $ \/ \/ $ $ $
我正在嘗試將 art_file 與 caption_file 並排合併。到目前為止,我嘗試了兩種方法:
- 使用
pr -Jmt art_file caption_file
.::""-, .::""-. /:: \ /:: \ |:: | _..--""""--.._ |:: | _________ .__ '\:.__ / .' '. \:.__ / / _____/____ _____ ______ | | ____ ||____|.' _..---"````'---. '.||____| \_____ \\__ \ / \\____ \| | _/ __ \ ||:. |_.' `'.||:. | / \/ __ \| Y Y \ |_> > |_\ ___/ ||:.-'` .-----. ';:. | /_______ (____ /__|_| / __/|____/\___ > ||/ .' '. \. | \/ \/ \/|__| \/ || / '-. '. \\ |. | ___________ __ ||:. _| ' \_\_\\/( \ | \__ ___/___ ___ ____/ |_ ||:.\_.-' ) || m `\.--._.-""-; | |_/ __ \\ \/ /\ __\ ||:.(_ . '\ __'// m ^_/ / '. _.`. | |\ ___/ > < | | ||:. \__^/` _)```'-...' _ .-'.' '-. |____| \___ >__/\_ \ |__| ||:..-'__ .' '. . ' '. `'. \/ \/ ||:(_.' .`' _. ' '-. '. . ''-._ ||:. : '. .' '. . ' ' '.` '._ ||:. : '. .' .::""-: .''. ' . . ' ':::''-. ||:. .' ..' . /:: \ '. . '. /:: \ ||:.' .' '. |:: | _.:---""---.._' |:: | ||. : '\:.__ / .' -. .- '. \:.__ / ||: : '. . ||____|_.' .--. .--. '._||____| ||:'.___: '. .' ||:. | ( \/ ) ||:. | ||:___| \ '. : ||:. | '-. .-' ||:. | [[____] '. '.-._||:. | __ '..' __ ||:. | '. : ||:. | (__\ (\/) /__) ||:. | '. : ||:. | ` \/ ` ||:. | '-: ||:. | () ||:. | '._||:. |________________________||:. | ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___| [[____] [[____]
paste art_file caption_file
.::""-, .::""-. /:: \ /:: \ |:: | _..--""""--.._ |:: | _________ .__ '\:.__ / .' '. \:.__ / / _____/____ _____ ______ | | ____ ||____|.' _..---"````'---. '.||____| \_____ \\__ \ / \\____ \| | _/ __ \ ||:. |_.' `'.||:. | / \/ __ \| Y Y \ |_> > |_\ ___/ ||:.-'` .-----. ';:. | /_______ (____ /__|_| / __/|____/\___ > ||/ .' '. \. | \/ \/ \/|__| \/ || / '-. '. \\ |. | ___________ __ ||:. _| ' \_\_\\/( \ | \__ ___/___ ___ ____/ |_ ||:.\_.-' ) || m `\.--._.-""-; | |_/ __ \\ \/ /\ __\ ||:.(_ . '\ __'// m ^_/ / '. _.`. | |\ ___/ > < | | ||:. \__^/` _)```'-...' _ .-'.' '-. |____| \___ >__/\_ \ |__| ||:..-'__ .' '. . ' '. `'. \/ \/ ||:(_.' .`' _. ' '-. '. . ''-._ ||:. : '. .' '. . ' ' '.` '._ ||:. : '. .' .::""-: .''. ' . . ' ':::''-. ||:. .' ..' . /:: \ '. . '. /:: \ ||:.' .' '. |:: | _.:---""---.._' |:: | ||. : '\:.__ / .' -. .- '. \:.__ / ||: : '. . ||____|_.' .--. .--. '._||____| ||:'.___: '. .' ||:. | ( \/ ) ||:. | ||:___| \ '. : ||:. | '-. .-' ||:. | [[____] '. '.-._||:. | __ '..' __ ||:. | '. : ||:. | (__\ (\/) /__) ||:. | '. : ||:. | ` \/ ` ||:. | '-: ||:. | () ||:. | '._||:. |________________________||:. | ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___| [[____] [[____]
它們都弄亂了第二個文件的對齊方式,粘貼產生了更好的輸出。所以我的問題是:
- 使用或者
paste
我pr
可以生成所需的輸出?也許我忽略了一些選項?- 如果它們都不是工作的正確工具,除了編寫一個新程序之外,我可以使用哪些預先存在的解決方案?
問題是每條線都有不同的長度。最簡單的解決方案是為 提供足夠大的寬度
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 的值
l
來printf
臨時調整間距。.::""-, .::""-. /:: \ /:: \ |:: | _..--""""--.._ |:: | _________ .__ '\:.__ / .' '. \:.__ / / _____/____ _____ ______ | | ____ ||____|.' _..---"````'---. '.||____| \_____ \\__ \ / \\____ \| | _/ __ \ ||:. |_.' `'.||:. | / \/ __ \| Y Y \ |_> > |_\ ___/ ||:.-'` .-----. ';:. | /_______ (____ /__|_| / __/|____/\___ > ||/ .' '. \. | \/ \/ \/|__| \/ || / '-. '. \\ |. | ___________ __ ||:. _| ' \_\_\\/( \ | \__ ___/___ ___ ____/ |_ ||:.\_.-' ) || m `\.--._.-""-; | |_/ __ \\ \/ /\ __\ ||:.(_ . '\ __'// m ^_/ / '. _.`. | |\ ___/ > < | | ||:. \__^/` _)```'-...' _ .-'.' '-. |____| \___ >__/\_ \ |__| ||:..-'__ .' '. . ' '. `'. \/ \/ ||:(_.' .`' _. ' '-. '. . ''-._ ||:. : '. .' '. . ' ' '.` '._ ||:. : '. .' .::""-: .''. ' . . ' ':::''-. ||:. .' ..' . /:: \ '. . '. /:: \ ||:.' .' '. |:: | _.:---""---.._' |:: | ||. : '\:.__ / .' -. .- '. \:.__ / ||: : '. . ||____|_.' .--. .--. '._||____| ||:'.___: '. .' ||:. | ( \/ ) ||:. | ||:___| \ '. : ||:. | '-. .-' ||:. | [[____] '. '.-._||:. | __ '..' __ ||:. | '. : ||:. | (__\ (\/) /__) ||:. | '. : ||:. | ` \/ ` ||:. | '-: ||:. | () ||:. | '._||:. |________________________||:. | ||:___|'-.-'-.-'-.-'-.-'-.-'-.-||:___| [[____] [[____]