我有以下格式的输入文件。
#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 …
我有一个 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 命令行中执行此操作?
我有一个这样的文件
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 解决方案。
谢谢
我正在尝试在终端上运行一个命令并将其提交给集群,但我得到了不同的结果。
当我在终端上输入时:
$ 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) 我有一个 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。
我有一个文件,其中第二列如下所示:
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/但这肯定行不通。
我有一个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_sapiens和Mus_musculus,如果我有Rat rattus rates成为Rat_rattus_rattus
我怎样才能做到这一点?