bash - 在 bash 上垂直翻转多个字符串

标签 bash awk sed paste fold

我试图垂直翻转任何句子的内容。因此,任何字符串的每个字符都将在同一行中垂直打印。例如:

Sample Text: This is an Example

Output expected: T i a E
                 h s n x
                 i     a
                 s     m
                       p
                       l 
                       e

按照以下方向,我正在努力实现这一目标,但目前还做不到。

    echo "Input provided by user is $@"
    for i in $(seq 1 $#); do

        echo ${!i} | sed 's/./ &/g' | xargs |tr ' ' '\n' 

        done


Current output:

T
h
i
s
i
s
a
n
E
x
a
m
p
l
e

还有,这也无济于事

echo Print text vertically | fold -c -w1
T
h
i
s

i
s

a
n

E
x
a
m
p
l
e

更多无效的替代方案:

#echo "Input provided by user is $@"

for i in $(seq 1 $#); do

content[i]=$(echo ${!i}|fold -c -w1)

   #echo ${content[i]}


    done

    echo ${content[@]}

最佳答案

max 变量保存所有单词的最大长度。对于您的文本,它将是:length('Example') 为 7(所有单词的最大长度)

使用 awk 脚本文件:

$ awk -f script.awk <<< "This is an Example"
TiaE
hsnx
i  a
s  m
   p
   l
   e

这是脚本:

{
        max=0
        for(i=1;i<=NF;i++)
                max=length($i)>max?length($i):max;

        for(j=1;j<=max;j++)
        {
                for(i=1;i<=NF;i++)
                {
                        temp=substr($i, j, 1);
                        printf temp==""?" ":temp
                }
                printf "\n"
        }
}

关于bash - 在 bash 上垂直翻转多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37543828/

相关文章:

macos - ./sysroot.sh : Operation not permitted

awk - 在 awk 语句中使用 sed

regex - 使用 grep 或 sed 从日志中提取电子邮件地址

bash - Sed 先移动到结束

bash - Shell 脚本 - 测试目录是否存在于当前目录或父/祖先目录中

linux - Bash'导出环境变量

linux - VIM:如何在 Ubuntu 上精确到行

linux - 提取括号内的单词并将其替换为句子

regex - grep 匹配整个证书?

Linux - 在每个文件中查找并替换为不同的字符串