我想找到一个文件中列出的模式,并在另一个文件中找到它们。第二个文件具有用逗号分隔的那些模式。
例如第一个文件 F1 有基因
ENSG00000187546
ENSG00000113492
ENSG00000166971
Run Code Online (Sandbox Code Playgroud)
第二个文件 F2 包含这些基因以及我需要的更多列(五列)
region gene chromosome start end
intronic ENSG00000135870 1 173921301 173921301
intergenic ENSG00000166971(dist=56181),ENSG00000103494(dist=37091) 16 53594504 53594504
ncRNA_intronic ENSG00000215231 5 5039185 5039185
intronic ENSG00000157890 15 66353740 66353740
Run Code Online (Sandbox Code Playgroud)
所以存在于第二个文件中的基因 ENSG00000166971 没有出现在 grep 中,因为它有另一个基因,用逗号分隔。
我的代码是:
grep -f "F1.txt" "F2.txt" >output.txt
Run Code Online (Sandbox Code Playgroud)
即使存在其中一个值,我也想要这些值,以及与之相关的数据。有什么办法可以做到这一点?
如何在具有特定行数的文件中添加一列值。我有一个这样的输入文件:
输入文件:
SPATA17 1 217947738
LYPLAL1 1 219383905
FAM47E 4 77192838
SHROOM3 4 77660162
SHROOM3 4 77660731
SHROOM3 4 77662248
Run Code Online (Sandbox Code Playgroud)
输出文件:
SPATA17 1 217947738 file1
LYPLAL1 1 219383905 file1
FAM47E 4 77192838 file1
SHROOM3 4 77660162 file1
SHROOM3 4 77660731 file1
SHROOM3 4 77662248 file1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想添加一列值,最多为文件中的行数。值保持一致,例如“file1”。
原因是我有 100 个这样的文件。我不想打开每个文件并粘贴一列。还有什么方法可以通过进入目录并添加一列值来自动执行此操作。该值来自文件名,必须在文件的每一行的最后/第一列中添加该文件名。
这是我提出的问题的延伸。 将目录从命令行传递到 shell 脚本
我有一个脚本,它使用定界符编写另一个脚本。我需要能够在定界文档中写入未展开的变量,因此我使用单引号 ( 'EOF'
)。但是,我需要扩展一个变量。$sourcedir
给定下面的脚本,我如何在heredoc中写入 的值?
#!/bin/bash
sourcedir="$1"
cd $sourcedir
find "$PWD" -maxdepth 2 -name \*_R1*.fastq.gz > list1
fastq_list=$sourcedir/list1 echo `cat $fastq_list` num_files=$(wc -l <
$sourcedir/list1) echo $num_files
cat > run_array_job.sh<<'EOF'
#!/bin/bash -l
#$ -j y
#$ -cwd -S /bin/sh
#$ -l h_vmem=10G
#$ -pe smp 12
if [ -z "${SGE_TASK_ID}" ]; then echo "Need to set SGE_TASK_ID" exit 1 fi
BASEDIR=$sourcedir
echo "BASEDIR" echo $BASEDIR
BASEFILES=$( ls *_R1.fastq.gz)
BASEFILES_ARRAY=(${BASEFILES})
BASEFILE=${BASEFILES_ARRAY[(${SGE_TASK_ID} - 1)]}
echo $BASEFILE …
Run Code Online (Sandbox Code Playgroud) 我正在使用 grep 过滤掉某些模式(在我的例子中是基因)的内容。欲了解更多信息,这里是较早的链接。
我的代码(应该工作)但不是。
grep -f file1 file2
Run Code Online (Sandbox Code Playgroud)
这是我的基因子集(file1):
C1QTNF3
C5orf22
C5orf28
C5orf34
C5orf38
C5orf42
C5orf49
C5orf51
C5orf64
C6
C7
C9
CAPSL
CARD6
CARTPT
CCDC125
CCDC152
CCL28
CCNB1
CCNO
CCT5
CD180
CDC20B
CDH10
CDH12
CDH18
CDH6
CDH9
CDK7
CENPH
CENPK
CKMT2
CLPTM1L
CMBL
CMYA5
COL4A3BP
CR749689
CRHBP
CRSP8P
CT49
CTNND2
CWC27
DAB2
DAP
DDX4
DEPDC1B
DHFR
DHX29
DIMT1
DMGDH
Run Code Online (Sandbox Code Playgroud)
下面是我的文本文件(file2),它正在匹配,即使文件 1 中没有基因 UNC79,如 SNPEFF_GENE_NAME=UNC79 所示,文件 2 中显示存在。
AC=3;AF=0.016;AN=186;BaseQRankSum=0.075;DB;DP=292;Dels=0.00;FS=4.271;HaplotypeScore=0.0891;InbreedingCoeff=0.0225;MLEAC=2;MLEAF=0.011;MQ=59.18;MQ0=1;MQRankSum=0.969;QD=13.42;ReadPosRankSum=-0.373;SNPEFF_EFFECT=INTRON;SNPEFF_EXON_ID=23;SNPEFF_FUNCTIONAL_CLASS=NONE;SNPEFF_GENE_BIOTYPE=protein_coding;SNPEFF_GENE_NAME=UNC79;SNPEFF_IMPACT=MODIFIER;SNPEFF_TRANSCRIPT_ID=ENST00000256339;VQSLOD=9.31;culprit=DP
Run Code Online (Sandbox Code Playgroud)
因此,grep 的输出是来自 file2 的整个文本 blob。
下面是文件中的完整行,它给出了问题。第二列是基因名称。我的file1中没有这个基因。所以我不想要这个特定行的输出。我有 1000 行这样的不同基因,只需要过滤掉文件 1 中的基因。
intronic …
Run Code Online (Sandbox Code Playgroud) 我有一个包含 7 列的文件,一个具有染色体区域的 GFF 文件。我想将 REGION ="exon" 的行折叠到文件中的只有一行。必须根据与每个区域重叠的区域折叠该行其他。
REGION START END SCORE STRAND FRAME ATTRIBUTE
exon 26453 26644 . + . Transcript "XM_092971"; Name "XM_092971"
exon 26842 27020 . + . Transcript "XM_092971"; Name "XM_092971"
exon 30355 30899 . - . Transcript "XM_104663"; Name "XM_104663"
GS_TRAN 30355 34083 . - . GS_TRAN "Hs22_30444_28_1_1"; Name "Hs22_30444_28_1_1"
snp 30847 30847 . + . SNP "rs2971719"; Name "rs2971719"
exon 31012 31409 . - . Transcript "XM_104663"; Name "XM_104663"
exon 34013 34083 . - …
Run Code Online (Sandbox Code Playgroud) 我是awk
编程新手。我有一个关于操作文本文件的问题,这是在可视化软件(Circos http://circos.ca)中绘制某些基于网络的图像所必需的
我有输入数据,我想使用awk/grep/sed
. 有 9 对(18 行)。5 对(前 10 行)用于“from=ABCB11”,4 对(接下来的 8 行)用于“from =ABCC8”。我想要的是从第一对的第一行中提取值,并在其他对的其余每一对中替换它。所以 group-2 的值是 9 10,它应该替换 group2 中所有出现的 value。组 2 的下一个值是 28 29,应替换为 9 10。
停靠点应由“from=name”确定,即“from=ABCB11”。在此实例中,必须从中捕获表达式并在其下一次出现时替换的行不必属于组 2。它可以是第 3 组或第 4 组,直到第 10 组。所以第二组(“来自 =ABCC8”)可能属于第 4/5/6 组,而不是第 2 组。这只是一个巧合,但是对于每个“from=”替代行,所有组编号都是相同的。
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-3 0 1 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-2 28 29 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM1,toid=114,use=1,z=1
group-5 0 1 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM1,toid=114,use=1,z=1
group-2 29 30 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM2,toid=115,use=1,z=1
group-5 1 2 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM2,toid=115,use=1,z=1
group-2 10 11 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=DRD2,toid=158,use=1,z=1 …
Run Code Online (Sandbox Code Playgroud) 如果语句为真,我的代码中有语法错误来移动文件。代码永远持续下去。也尝试添加引号但无法添加。我知道我正在做一些愚蠢的错误。
for file in *.sort;
do if [`wc -l` $i -eq 57817];
then mv "$i" "../$i";
fi; done
Run Code Online (Sandbox Code Playgroud)
有什么建议?