首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建一个具有特定字符串和不同数字和字母的序列

创建一个具有特定字符串和不同数字和字母的序列
EN

Unix & Linux用户
提问于 2022-06-16 14:01:24
回答 3查看 317关注 0票数 0

我需要创建一个单独的行,其中的列具有一个共享的字符串、不同的数字和共享重复的字母。我想要的输出如下:

代码语言:javascript
运行
复制
SNP1a  SNP1b  SNP2a  SNP2b ... SNP3502a  SNP3502b

我刚开始使用unix/linux,所以我的尝试还不成熟。到目前为止,我已经做了:

代码语言:javascript
运行
复制
seq -f "SNP%1g" 1 3502 > header
awk '{print;print;}' header > header2

因此,header2是:

代码语言:javascript
运行
复制
SNP1
SNP1
SNP2
SNP2
...
SNP3502
SNP3502

但是,我在如何在每一行中添加一个交替的ab方面陷入了困境。

任何帮助都将不胜感激!

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2022-06-16 15:02:30

使用bash

代码语言:javascript
运行
复制
printf '%s ' SNP{1..3502}{a..b}

如果最后一个尾随空间是一个问题,则将其包装在一个函数中:

代码语言:javascript
运行
复制
headers(){
    local pieces=( SNP{1..3052}{a..b} ) IFS=' '
    printf '%s' "${pieces[*]}" # add '\n' to get new line at the end
}
票数 1
EN

Unix & Linux用户

发布于 2022-06-16 22:45:46

对于任何ksh、bash或zsh,只需使用echo:

代码语言:javascript
运行
复制
$ echo SNP{1..3502}{a,b}       # {a..b} also works here.
SNP1a SNP1b SNP2a SNP2b SNP3a SNP3b SNP4a SNP4b SNP5a .....

在这种情况下,echo是非常好的,因为在生成的列表中没有前导“-”,也没有特殊的字符。

如果必须使用printf,请尝试:

代码语言:javascript
运行
复制
printf '%s\n' SNP{1..3}{a,b} | paste -s -d ' ' -

如果必须使用awk,则使用埃德·莫顿的回答

票数 2
EN

Unix & Linux用户

发布于 2022-06-16 15:49:24

在每个Unix框上使用任何shell中的任何awk:

代码语言:javascript
运行
复制
awk '
     BEGIN {
        n = split("a b", lets)
        for ( i=1; i <= 5; i++ ) {
            for ( j=1; j <= n; j++ ) {
                printf "%sSNP%d%s", sep, i, lets[j]
                sep = OFS
            }
        }
        print ""
    }
'
SNP1a SNP1b SNP2a SNP2b SNP3a SNP3b SNP4a SNP4b SNP5a SNP5b
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/706420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档