小编use*_*373的帖子

使用 awk 进行数据操作

我有以下格式的输入文件。

#track
chr11   61731756    61735132    FTH1    -
chr12   6643584 6647537 GAPDH   +
chr11   18415935    18429765    LDHA    +
chr12   21788274    21810728    LDHB    -
chr22   24236564    24237409    MIF +
chr4    6641817 6644470 MRFAP1  +
chr15   72491369    72523727    PKM -
chr10   73576054    73611082    PSAP    -
chr2    85132762    85133799    TMSB10  +
chr13   45911303    45915297    TPT1    -
Run Code Online (Sandbox Code Playgroud)

我想得到一个输出文件,如果第 5 列是 +,则从第 2 列减去 5000 并将 2000 添加到第 3 列,以便输出以下

chr11   18410935    18431765    LDHA    +
chr2    85127762    85135799    TMSB10  +
Run Code Online (Sandbox Code Playgroud)

如果第 5 列是“-”,则将 5000 添加到第 3 …

awk

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

从fasta文件中提取子集

我有一个 fasta 文件,它看起来像这样:

>chr1
ACGGTGTAGTCG
>chr2
ACGTGTATAGCT
>chrUn
ACGTGGATATTT
>chr21
ACGTTGATGAAA
>chrX
GTACGGGGGTGG
>chrUn5
TGATAGCTGTTG
Run Code Online (Sandbox Code Playgroud)

我只想提取chr1, chr2, chr21,chrX以及它们的序列。所以我想要的输出是:

>chr1
ACGGTGTAGTCG
>chr2
ACGTGTATAGCT
>chr21
ACGTTGATGAAA
>chrX
GTACGGGGGTGG
Run Code Online (Sandbox Code Playgroud)

如何在 unix 命令行中执行此操作?

awk text-processing bioinformatics

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

awk 帮助从特定列打印到最后

我有一个这样的文件

gene    -   chr7    55675   55676   100 100
gene    -   chr7    55678   55679   100 100
gene    -   chr7    55683   55686   NP  100
Run Code Online (Sandbox Code Playgroud)

该文件是制表符分隔的。

我想更改文件,使第 5 列应位于第 4 列,第 4 列应位于第 5 列,然后按原样打印所有列。我只显示第 5 列之后的 2 列,但可以有更多。

我试过了,cut -f 1,2,3,5,4,6-但它不起作用。

我更喜欢它的 awk 解决方案。

谢谢

awk

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

终端与 qsub 提交的不同结果

我正在尝试在终端上运行一个命令并将其提交给集群,但我得到了不同的结果。

当我在终端上输入时:

$ for i in *_1.fastq.gz; do echo $i >> t.txt; zcat $i | \
    grep "GCTGGCAAAAAGAAGGTAACATGTTTT" >> t.txt ; echo >> t.txt ; done
Run Code Online (Sandbox Code Playgroud)

我得到这样的输出

adrenal_4a_ERR315335_1.fastq.gz
GCANAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA

adrenal_4a_ERR315452_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4c_ERR315392_1.fastq.gz

adrenal_4c_ERR315450_1.fastq.gz

and so on..
Run Code Online (Sandbox Code Playgroud)

这是预期的输出。

当我通过向 HPC 集群提交相同的命令时,qsub得到了完全不同的结果:

$ qsub -l h_vmem=4G -cwd -j y -b y -N n_tr -R y \
    "for i in *_1.fastq.gz; do echo $i >> t.txt; zcat $i | \
       grep "GCTGGCAAAAAGAAGGTAACATGTTTT" >> t.txt ; echo >> t.txt ; done" …
Run Code Online (Sandbox Code Playgroud)

command-line shell bash qsub

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

awk 中的精确模式匹配

我有一个 listA ,如下所示:

gene1
gene2
gene11
gene22
gene23
Run Code Online (Sandbox Code Playgroud)

我还有一些制表符分隔的文本文件(*hist.txt),其第四列与列表中的基因匹配。我想从制表符分隔的文本文件中提取 listA 中每个基因的值

这就是我写的

for i in `cat listA.txt`
do
    for a in *hist.txt
    do
        fn=${a%%_*}
        cat $a | awk -v OFS="\t" -v fn="$fn" -v pattern="$i" '$4 ~ pattern{print fn,$0}' >> ${i}_out.txt
    done
done
Run Code Online (Sandbox Code Playgroud)

我的模式匹配在 awk 中失败,没有进行精确的模式匹配。gene1 的输出还包括gene11。

awk

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

使用 awk 在前面没有数字时如何匹配字符串?

我有一个文件,其中第二列如下所示:

37M533N38M
14M1170N45M233N16M
3S45M3N35M
Run Code Online (Sandbox Code Playgroud)

我想提取那些包含字符串3N ,但之前立即没有其他号码3。因此,例如,A3N会匹配但23N不会。还应该注意的是3N,永远不会单独存在,并且字符串3N不会以3N. 结果应该是上面的第三行:

3S45M3N35M
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 awk 中做到这一点?我试过了,$2 ~ /3N/但这肯定行不通。

awk text-processing

0
推荐指数
1
解决办法
1439
查看次数

用下划线连接文件的每一行

我有一个test.txt像这样命名的输入文件:

Homo sapiens
Mus musculus
Rat rattus rattus
Run Code Online (Sandbox Code Playgroud)

我想在for这里使用一个循环并遍历每一行。像这样的事情:

for i in "`cat test.txt`"
do
        fn=store_name
        do something else > ${fn}.txt
done
Run Code Online (Sandbox Code Playgroud)

由于每行名称之间都有一个空格,因此我在cat test.txt. 我希望做一个变量fn它重视_线条的这些名字之间,我fn变得Homo_sapiensMus_musculus,如果我有Rat rattus rates成为Rat_rattus_rattus

我怎样才能做到这一点?

bash sed for

0
推荐指数
1
解决办法
179
查看次数

标签 统计

awk ×5

bash ×2

text-processing ×2

bioinformatics ×1

command-line ×1

for ×1

qsub ×1

sed ×1

shell ×1