小编kva*_*our的帖子

从 fasta 文件中删除多个序列

我有一个字符序列的文本文件,由两行组成:标题和下一行中的序列本身。该文件的结构如下:

>header1
aaaaaaaaa
>header2
bbbbbbbbbbb
>header3
aaabbbaaaa
[...]
>headerN
aaabbaabaa
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,我有一个要删除的序列标题列表,如下所示:

>header1
>header5
>header12
[...]
>header145
Run Code Online (Sandbox Code Playgroud)

这个想法是从第一个文件中删除这些序列,因此所有这些标头+以下行。我使用 sed 执行此操作,如下所示,

while read line; do sed -i "/$line/,+1d" first_file.txt; done < second_file.txt
Run Code Online (Sandbox Code Playgroud)

它可以工作,但需要很长时间,因为我使用 sed 多次加载整个文件,而且它很大。关于如何加快这个过程的任何想法?

bash awk sed fasta

3
推荐指数
1
解决办法
4809
查看次数

如何转义关联数组中具有连字符的键

我想在bash中创建一个地图,其中某些地图键的值可能包含连字符(-)

我试过下面的代码

declare -a buckets
buckets["us-east-1"]="bucketname-us-east-1";

region="us-east-1"
buckets[$region]="bucketname-us-east-1"; 

# both of them throws buckets["us-east-2"]: bad array subscript

buckets["us\-east\-1"]="bucketname-us-east-1"; 
# throws syntax error: invalid arithmetic operator (error token is "\-east\-1")
Run Code Online (Sandbox Code Playgroud)

还有其他创建地图的方法吗?

linux bash dictionary

3
推荐指数
1
解决办法
98
查看次数

根据匹配列合并许多文件

我有很多文件(我以5为例)

如果与第一个文件不匹配,则应在输出中附加0

文件1

1001 1 2
1002 1 2
1003 3 5
1004 6 7
1005 8 9
1009 2 3
Run Code Online (Sandbox Code Playgroud)

文件2

1002 7
1003 8
Run Code Online (Sandbox Code Playgroud)

文件3

1001 5
1002 3
Run Code Online (Sandbox Code Playgroud)

文件4

1002 10
1004 60
1007  4
Run Code Online (Sandbox Code Playgroud)

文件5

1001 102
1003 305
1005 809
Run Code Online (Sandbox Code Playgroud)

期望的输出

1001 1 2 0 5  0 102
1002 1 2 7 3 10   0
1003 3 5 8 0  0 305
1004 6 7 0 0 60   0
1005 8 9 0 0  0 …
Run Code Online (Sandbox Code Playgroud)

bash awk

3
推荐指数
1
解决办法
97
查看次数

在 csh 中转义 $

我怎样才能$在csh中逃脱?在<双引号> ( "") 内。我正在尝试这样做,但无法逃避 <dollar> 符号 ( $)

alias e "echo \\!:2-$"
Run Code Online (Sandbox Code Playgroud)

这可行,但不足以满足我的需求

alias e echo \\!:2-$
Run Code Online (Sandbox Code Playgroud)

shell csh

2
推荐指数
1
解决办法
1万
查看次数

猫管道awk操作与文件上的awk命令的比较

在尝试优化与服务器有关的数据时,我和我的团队讨论了linux命令的用法。请会员请帮助我们更准确地理解该概念。

在服务器上,我们有每分钟创建的日志文件,我们需要搜索带有特定标签的日志,例如:错误日志,超时日志,请求失败日志。其中许多要求是提供有关这些标签计数的信息

简单的逻辑将是唤醒特定字段(使用定界符)以进行排序,并使用uniq -c命令来计算此类实例的数量。

我可以看到两种执行方法:

cat fname | awk -F":" {'print $1'} | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

和

awk -F":" {'print $1'} fname | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

文件大小可以以GB为单位,因此哪个命令可能更有效。

linux bash shell awk

2
推荐指数
2
解决办法
3194
查看次数

如何将数组传递给函数,以便在更改该函数中的数组值时原始数组的值不会改变?

using namespace std;
#include<iostream>
int passarr(int b[],int s)
{
   //Some Modification in the array b
    b[0]=0;
    b[s-1]=0;

    //Printing the array b
    for(int i=0;i<s;i++)
    {
        cout<<b[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int arr[100];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }

    //Function call and passing array a to the function`
    passarr(arr,n);

    //Printing the array arr
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我已经将数组传递arr给了函数passarr(),它执行了一些修改.问题是修改也反映在原始数组上.有没有办法将数组传递给函数,以便在执行函数中的任何操作时不会更改原始数组?

c++ arrays function

2
推荐指数
1
解决办法
84
查看次数

使用 Gnu AWK 检索匹配的正则表达式记录分隔符

使用 AWK,我通过将文本文件拆分为多个记录来处理该文本文件。我使用正则表达式作为记录分隔符RS。有没有办法获取RS仅代表正则表达式字符串的找到的记录分隔符?

例子:

BEGIN { RS="a[0-9]*. "; ORS="\n-----\n"}
  /foo/ {print $0 RS;}
END {}
Run Code Online (Sandbox Code Playgroud)

输入文件:

a1. Hello
this
is foo
a2. hello
this
is bar
a3. Hello
this
is foo
Run Code Online (Sandbox Code Playgroud)

输出:

Hello
this
is foo
a[0-9]*.
-----
Hello
this
is foo
a[0-9]*.
-----
Run Code Online (Sandbox Code Playgroud)

如您所见,输出打印RS为表示正则表达式的字符串,但不打印实际值。如何检索记录分隔符的实际匹配值?

预期输出:

Hello
this
is foo
a1
-----
Hello
this
is foo
a3
-----
Run Code Online (Sandbox Code Playgroud)

awk

2
推荐指数
1
解决办法
1051
查看次数

在C语言中,*p = vec [n]与p =&vec [n]相同?

我在C中自学指针,我的问题是:*p=vec[n]和写一样p=&vec[n],在哪里n只是一个索引而且p是一个指针?

c pointers

2
推荐指数
1
解决办法
80
查看次数

此功能是什么意思?功能$$ 1

这是我第一次看到这种用法。不幸的是,我找不到相关信息。

awk '{print $$1}'
Run Code Online (Sandbox Code Playgroud)

是什么$$1呢?是数组吗?

awk '{print $$1}'
Run Code Online (Sandbox Code Playgroud)

以上仅是示例。请注意,这不是一个单一的$,而是一个$$

awk

2
推荐指数
1
解决办法
66
查看次数

如何将位模式Z'FEDCBA09'分配给32位整数

如何Z'FEDCBA09'将最高有效位等于1 的boz-literal-constant 或任何其他位模式分配给整数?

标准规定:

INT(A[,KIND]):如果A为boz-literal-constant,则结果的值是根据16.3中的模型,其位序列与根据16.3.3通过填充或截断修改的A的位序列相同的值。最高有效位为1的位序列的解释取决于处理器。

来源:Fortran 2018 Standard

因此,以下分配可能会失败(假定integer默认为32位):

program boz
   implicit none
   integer :: x1 = int(Z'FEDCBA09')
   integer :: x2 = int(Z'FFFFFFFF')
   integer :: x3
   data x3/Z'FFFFFFFF'/
end program
Run Code Online (Sandbox Code Playgroud)

使用gfortran,这仅在添加时起作用,但这会带来-fno-range-check额外的不良影响:

-fno-range-check:禁用在编译过程中对常量表达式的简化结果进行范围检查。例如,当简化时,GNU Fortran将在编译时给出错误。a = 1. / 0.使用此选项,将不会给出错误,并且将为值分配+ Infinity。如果表达式的计算结果超出的相关范围[-HUGE():HUGE()],则该表达式将替换为-Inf或+Inf适当替换。类似地,DATA i/Z'FFFFFFFF'/在大多数系统上都会导致整数溢出,但是-fno-range-check该值将“环绕”并且i将被初始化为-1。

来源:GNU编译器集合,gfortran手册

我尝试了以下方法,效果很好,但仍然不是100%

integer(kind=INT32) :: x1 = transfer(real(Z'FEDCBA09',kind=REAL32),1_INT32)
integer(kind=INT32) …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran

2
推荐指数
1
解决办法
125
查看次数

标签 统计

awk ×5

bash ×4

linux ×2

shell ×2

arrays ×1

c ×1

c++ ×1

csh ×1

dictionary ×1

fasta ×1

fortran ×1

function ×1

gfortran ×1

pointers ×1

sed ×1