当前位置: 首页 > 知识库问答 >
问题:

想问下这个字符串处理的简单的小脚本怎么写(bash或者vim都好)?

滕英奕
2024-06-17

比方说类似

my_fun("abc","defghi","jk");my_fun("abcdefg","hijklmnop","q");

类似这样的文字,我想实现类似这样的对齐效果,就是不同行的逗号对齐.

my_fun("abc"    ,"defghi"   ,"jk");my_fun("abcdefg","hijklmnop","q" );

以我想得到的脚本写法,大致就是先按照逗号切割字符串成字符串数组,然后统计每一列的最长长度,最后再把字符串数组拼回去,只不过拼回去前在它的尾部添加适当数量的空格...
感觉非常麻烦,我觉得这个需求应该有更灵活的实现.求问,有吗?bash,vim,awk之类的什么都好.

共有1个答案

仲孙献
2024-06-17

在 Bash 中,你可以编写一个脚本来实现这个功能。以下是一个简单的 Bash 脚本示例,该脚本读取输入,并自动对齐逗号分隔的参数:

#!/bin/bash# 初始化每列的最大长度数组max_lengths=()# 读取输入,直到遇到EOF(Ctrl+D)while IFS=',' read -ra args; do    # 遍历每个参数,更新或初始化最大长度    for ((i=0; i<${#args[@]}; i++)); do        # 去除参数两边的引号        arg=${args[$i]//\"/}        # 如果这是第一个参数或当前参数比已知的最大长度还长,则更新最大长度        if ((i >= ${#max_lengths[@]})); then            max_lengths[$i]=${#arg}        elif (( ${#arg} > max_lengths[$i] )); then            max_lengths[$i]=${#arg}        fi    donedone# 再次读取输入以构建对齐后的输出while IFS=',' read -ra args; do    # 遍历每个参数,并在后面添加空格以对齐    for ((i=0; i<${#args[@]}; i++)); do        arg=${args[$i]}        # 添加适当的空格以达到对齐效果        printf -v padded_arg '%-*s' "${max_lengths[$i]}" "${arg//\"/}"        # 打印参数,除了最后一个后面打印逗号,其他都打印逗号加空格        if (( i < ${#args[@]}-1 )); then            echo -n "$padded_arg,"        else            echo "$padded_arg"        fi    done    echo  # 打印换行符,用于分隔不同行的输出done

使用此脚本,你可以从标准输入读取格式化的字符串,或者从文件中读取,如下所示:

# 将此脚本保存为 align_function_calls.sh 并给予执行权限chmod +x align_function_calls.sh# 运行脚本,输入你的函数调用,按 Ctrl+D 结束输入./align_function_calls.sh

然后,你可以逐行输入你的函数调用,最后按 Ctrl+D 发送 EOF 信号来结束输入。脚本会输出对齐后的结果。

如果你希望从文件中读取输入,可以重定向文件到脚本:

./align_function_calls.sh < input.txt

这里,input.txt 是包含你的函数调用列表的文件。

注意,这个脚本假定输入是正确格式化的,即每一行都包含相同数量的参数,并且参数是用逗号分隔的。它也假定参数不会包含换行符,且每个参数都被双引号包围。如果你的输入不符合这些假设,你可能需要调整脚本以适应你的具体情况。

 类似资料:
  • 我正在使用gradle和bash脚本在docker图像中构建几个android应用程序。该脚本由运行docker映像的jenkins触发。在bash脚本中,我收集有关构建成功的信息。我想将该信息传递给jenkinsfile的groovy脚本。我试图在docker容器中创建一个txt文件,但jenkinsfile中的groovy脚本找不到该文件。这是我的jenkinsfile的groovy脚本: 在

  • 本文向大家介绍Python 字符串大小写转换的简单实例,包括了Python 字符串大小写转换的简单实例的使用技巧和注意事项,需要的朋友参考一下 ①所有字母都转换为大写 # -*- coding:utf-8 -*- if __name__ == "__main__":     a = 'hello, world!'     print(a.upper())输出: HELLO, WORLD! ②所有字

  • 写一个脚本,任意输入一个目录和一个字符串,对输入的字符串进行判断,如果字符串内容等于”ww”,则将该目录下的所有子目录删除,所有子文件拷贝到/var 目录下:如果字符串内容等于”rr”,则在该目录下创建 test1.txt 文件

  • 问题内容: 我有一个包含字符串的python列表变量。是否有一个python函数可以将所有字符串一次转换为小写,反之亦然。 问题答案: 可以使用列表推导来完成。这些基本上采取的形式。例如,要创建一个新列表,其中所有项目均为小写(或在第二个片段中为大写),则可以使用: 您还可以使用以下功能:

  • 一个 ASP 脚本能执行的任务从简单如显示一个变量的值到复杂如发送一条 SQL 语句给数据库。本节讨论许多脚本编写人员想完成的通用任务,例如处理一个 HTML 表格返回的信息或调试一个脚本。如果您是脚本语言的新手或只是 ASP 的新手,请认真阅读 使用脚本语言 中的主题来学习如何创建一个 ASP 页以及 ASP 命令的基本语法。 本节包括: 发送内容给浏览器:解释如何控制返回给浏览器的页。 发送脚