小编use*_*373的帖子

用于解析文件的 awk 命令

我有以下文本文件。我正在向您展示前 3 行。

chrom   st  end gene    strand  c1  c2  c3  c4  c5  c6  c7  c8  c9  c10 c11 c12 c13 c14
chr6    3345    3543    geneA   +   36  -23 -1  3   1250    946 416 458 475 417 58  80  2   14
chr9    1302    1389    geneB   -   8   -10 -18 -8  2896    2128    635 955 372 385 -20 31  -7  -7
Run Code Online (Sandbox Code Playgroud)

我想按原样打印第一行,因为它是标题行。

然后对于后续行(即从第 2 行开始),我想按原样打印前 5 个字段(直到链信息),然后如果该字段(从第 6 个字段开始)具有值 >= 100 打印该值照原样,如果该字段的值 < 100,只需将其替换为 NA。

所以我的输出文件应该看起来像这样(理想情况下,制表符分隔)

chrom   st  end gene    strand …
Run Code Online (Sandbox Code Playgroud)

awk

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

将序列拆分为固定宽度

我有一个这样的文件,它是一个两列制表符分隔的文件。

CTGCAGTTTCCCCAAATGTGGGAAACTTGACTGTATAATTTGTGGCAGTGGTA   a1
GATTTCCCCAAATGTGGGAAACTCACTCGGCAGGCGTTGATA  a2
Run Code Online (Sandbox Code Playgroud)

我想得到这样的输出:

>a1
CTGCAGTTTCCCCAAATGTG
GGAAACTTGACTGTATAATT
TGTGGCAGTGGTA
>a2
GATTTCCCCAAATGTGGGAA
ACTCACTCGGCAGGCGTTGA
TA
Run Code Online (Sandbox Code Playgroud)

我试图在awk 中使用 fold 命令。是否可以在其中使用另一个命令awk

另外,我想要的每条线的宽度是 15,所以我尝试了这样的操作,但没有奏效:

awk -F "\t" '{a=$(fold -w 50 $1);print a,$2}' file.txt 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

awk shell-script text-processing

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

使用 AWK 的列操作

我有一个超过 200 列的文件。作为示例目的,我在这里使用列数较少的文件(9)。下面是输入文件(几行)

chr10   181243  225933  1   1   1   10  0   36
chr10   181500  225933  1   1   1   106 0   35
chr10   226069  255828  1   1   1   57  0   37
chr10   243946  255828  1   1   1   4   0   27
chr10   255989  267134  1   1   1   87  0   32
chr10   255989  282777  1   1   1   61  0   34
chr10   267297  282777  1   1   1   61  0   37
chr10   282856  283524  1   1   1   92  0   35
chr10   282856  285377  1   1 …
Run Code Online (Sandbox Code Playgroud)

awk

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

从 2 个文件中输出公共行,从一个输出文件中的两个文件中输出不常见行

我有 2 个文本文件。让我们将它们命名为 file1.txt 和 file2.txt

file1.txt 如下

chr10   181144  225933
chr10   181243  225933
chr10   181500  225933
chr10   226069  255828
chr10   255989  267134
chr10   255989  282777
chr10   267297  282777
chr10   282856  283524
chr10   283618  285377
chr10   285466  285995
Run Code Online (Sandbox Code Playgroud)

file2.txt 如下

chr10   181144  225933
chr10   181243  225933
chr10   181500  225933
chr10   255989  282777
chr10   267297  282777
chr10   282856  283524
chr10   375542  387138
chr10   386930  387138
chr10   387270  390748
chr10   390859  390938
chr10   391051  394580
chr10   394703  395270
Run Code Online (Sandbox Code Playgroud)

我想在单个文件中输出的是

  1. file1 和 file2 …

text-processing files

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

awk 操作文件

我有一个这种格式的大文件,我向您展示的前几行包括标题。

gene    c1  c2  c3  c4  c5  c6  c7  c8
G1*1    0   0   0   0   0   0   0   0
G2*2    0   0   0   0   1   1   1   1
G3*3    0   0   2   2   44  44  62  62
G4*4    22  0   46  0   1308    7   1773    4
Run Code Online (Sandbox Code Playgroud)

基因的第一行是标题行。我想保持原样,然后我想用 FS = * 拆分剩余的行,以便现在我有一个看起来像这样的文件作为输出

gene    coord   c1  c2  c3  c4  c5  c6  c7  c8
G1  1   0   0   0   0   0   0   0   0
G2  2   0   0   0   0   1   1   1 …
Run Code Online (Sandbox Code Playgroud)

awk

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

文件的制表符分隔

我有一个带有 seq 的文件喜欢这个

ATCGTTTCTCAGCCTTTTGGCAAGACCAAGTGTAGTATCTGTTCTTATCAGATATTGGTATCTGCAGGCACTCCTGGAACCAAT
ATCACTTCTCAACCTTTTGACTAAGATCAAGTGTAATATCTATCTTTATCAGTTTAATATCTGAGATCTCCTTTATCTGAGGACAATATATTTAATGGATTTTTGGAACAGAGAGAAGGAATAGGAGCTTGTCCTGTCCACTCCATGCATTGACCTGGTATTGCAGGACCTCCAGAAACACCACCCCCTCC
ACGCATTATCCGCCTATTGGCTAAAAACAAATGTAGTATCTGTTCCTATCAGTTAAAGCATCAAATGTGGTCTCTAAGTTCAGGGAATTAAATTAATATTTGGAATTGGGAGATGGTTTGGGAGCTTGCTCTATCCTCTCCATGCCTCAGCATGTAATTGCAATGCTTTCAGGAGTGGTGCATTCCTT
Run Code Online (Sandbox Code Playgroud)

它有 3 行。我希望每一行的每个字母都由制表符分隔,然后想将其存储在另一个文件中。我该怎么做。

sed awk text-processing

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

unix 中的模式匹配和捕获

我有一个这样的文件:

A1-1915435_1_MIMAT0000069_MirBase_miR-16_microRNA_1_22-A1-1915435_1_ENSG00000206737_ENST00000384010_U1_snRNA_73_115
A1-2362643_1_MIMAT0000732_MirBase_miR-378_microRNA_1_21-A1-2362643_1_ENSG00000222328_ENST00000410396_U2_snRNA_168_211
Run Code Online (Sandbox Code Playgroud)

我想要一个输出,其中我将 micro RNA 部分和 ENSG 部分选项卡分开。像这样的事情:

miR-16_microRNA ENSG00000206737
miR-378_microRNA    ENSG00000222328
Run Code Online (Sandbox Code Playgroud)

我可以为它编写一个 perl 脚本,但我想必须有使用 awk、sed perl 等的命令行解决方案。

linux sed awk perl regular-expression

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

根据字符串过滤文件

我有一个看起来像这样的文件

a   0   gene1   56  0   6S32M12S    *
b   256 gene2   56  0   6S32M12S    *
c   256 gene3   55  0   6S27M17S    *
d   16  gene4   110 9   19S25M6S    *
e   272 gene5   141 9   23S21M6S    *
f   272 gene6   139 9   24S20M6S    *
g   0   gene7   38  1   6S44M   *
h   256 gene8   38  1   6S44M   *
I   256 gene9   38  1   6S44M   *
j   256 gene10  40  1   8S42M   *
Run Code Online (Sandbox Code Playgroud)

第 6 列是我要过滤的字符串。基本上,如果字符串包含等于或大于 16S 的匹配项(假设为 16S、17S、18S、19S 和更多),则报告这些行。我怎样才能做到这一点?上面例子的输出是:

c   256 …
Run Code Online (Sandbox Code Playgroud)

shell awk text-processing

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

操作 shell 脚本

我有一个 shell 脚本,它可以执行一些操作,例如将值存储在变量中。作为一个例子,这是我的脚本:

for i in ../../*.bam
do
        fn=$(basename $i)
        fn=${fn%_Aligned.sortedByCoord.out.bam}

        bamToBed -i $i | awk -v OFS="\t" '{if($6 ~ /+/){print $1,$2+67,$2+67+1,$4,$5,$6}else{print $1,$3-67-1,$3-67,$4,$5,$6}}' | awk -v OFS="\t" '$3 > 0' > ${fn}_pos.bed

        sortBed -g $genome -i ${fn}_pos.bed > ${fn}_n_pos.bed

        mv ${fn}_n_pos.bed ${fn}_pos.bed

        perl counter.pl ${fn}_pos.bed | sortBed -g $genome -i stdin | intersectBed -g $genome -sorted -a <(cat $genome | awk -v OFS="\t" '{print $1,"0",$2}') -b stdin -wa -wb | cut -f 4-7 > ${fn}.bedGraph

        bedGraphToBigWig ${fn}.bedGraph $genome ${fn}.bw

        a=`samtools …
Run Code Online (Sandbox Code Playgroud)

shell awk

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

为终端内的多个链接运行相同的命令

我有一个包含许多链接的文件。例如,这里是我的文件:

link1
link2
link3
link4
link5
link6
link7
link8
link9
link10
link11
link12
link13
link14
link15
link16
Run Code Online (Sandbox Code Playgroud)

我想在同时运行第 1 个 4 个链接的单个终端上运行特定命令。例如我想运行的命令是

wget link1
wget link2
Run Code Online (Sandbox Code Playgroud)

等等。但我想同时运行前 4 个链接。然后,如果其中一个链接下载完成,则应自动提交下一个链接(即link5)以供下载,依此类推。

我正在寻找一种方法,我不一个一个地下载链接(使用更多时间),我也不必打开多个终端来提交多个单独的链接作为单独的命令。任何帮助将非常感激。

shell wget

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