linux - Bash:将带有新行的字符串转换为带有逗号、内联的唯一值的字符串

标签 linux bash shell

我正在使用一些bash脚本,需要你的帮助:)我想要的结果:V04.01,V04.02 - 一个字符串,没有新行,唯一值,逗号。仅名称前缀(全部在 __ 之前),仅适用于 sql 文件。

原始 diff 命令及其结果:

git diff --name-only 123132132213 origin/dev

给出:

.abc.yml
abc/test.xml
aaa/V04.01__SampleInsert.sql
bbb/V04.01__SampleInsert.sql
abc/efg/V04.02__SampleUpdate.sql

我想要的结果: V04.01、V04.02

我的脚本不起作用:

git diff --name-only 12313123123132 origin/dev | git diff --name-only 12313123123132 origin/dev | grep '.sql' | grep '.sql' |转 |切 -d"/"-f1 |转 | awk '{sub(/__.*/,x)}1'

结果是:

V04.01
V04.01
V04.02

如果有人知道如何内联执行此操作,请提前致谢。

最佳答案

使用 cat file 代替我没有的 git 命令:

$ cat file | awk -F'/' '/\.sql$/{ sub(/__.*/,"",$NF); if ( !seen[$NF]++ ) printf "%s%s", sep, $NF; sep=", " }'
V04.01, V04.02

我知道您说过您不需要任何换行符,但这会使输出不是有效的文本文件,因此如果您确实想要终止换行符,只需在末尾添加 END{print ""} awk 脚本的一部分。

关于linux - Bash:将带有新行的字符串转换为带有逗号、内联的唯一值的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77037291/

相关文章:

linux - 使用每行一个项目的输入文件在 shell 脚本中创建一个对话框?

linux FIFO阻塞管道

c - 在 C 中实现 shell 并需要帮助处理输入/输出重定向

sql - 如何从 <<EOF 捕获结果并放入 bash 中的变量?

c - 使用 C 在 Linux shell 中实现输入/输出重定向

python - UDev 规则 Raspberry PI 无法启动 Web 应用程序

python - 使 Python 脚本在系统范围内可访问

linux - cronjob 不会在工作日开始

bash - "key=value bash-script"用法记录在哪里?

sql - Bash 脚本 - 带引号的命令中的 If 语句