### 定义输入输出文件
# 输入文件
fn="KE_J.txt"
# KEGG_to_GENE 输出文件
bed="KEGG_to_GENE.bed.txt"
# KEGG_to_KEGG 输出文件
of="KEGG_to_KEGG.bed.txt"
#
### 检查tmp文件
# 因为tmp文件是追加写入的,如果已存在会造成错误
if [ ! -f "./list1.tmp" ]
then
echo "Checking tmp files"
else
rm list1.tmp
fi
#
if [ ! -f "./list2.tmp" ]
then
echo "Checking tmp files"
else
rm list2.tmp
fi
### 生成KEGG于GENE的对应文件
# 计算行数
ln=`cat $fn | wc -l`
# 去掉第一行列名后,逐行运行
for ((i=2;i<=$ln;i++))
do
# 提取KEGG通路名
KEGG=`cat $fn | sed -n ${i}p | awk -F, 'BEGIN{FS="\t"}{print $1}'`
# 计算第八列中基因数(提取第八列后,awk以"|"为字段分隔符计算字段数)
NUM=`cat $fn | sed -n ${i}p | awk -F, 'BEGIN{FS="\t"}{print $8}' | awk -F, 'BEGIN{FS="|";ORS="\n"} {print NF}'`
# 打印通路(f非必要1)
echo $KEGG
# 打印第一列KEGG通路,通路中对应多少基因就打印多少次
for ((j=1;j<=$NUM;j++))
do
echo $KEGG >> list1.tmp
done
# 将基因名逐行打印,作为第二列
cat $fn | sed -n ${i}p | awk -F, 'BEGIN{FS="\t"}{print $8}' | awk -F, 'BEGIN{FS="|";ORS="\n"} { for(i=1;i<=NF;i++) print $i}' >> list2.tmp
done
# 合并KEGG和基因名,及得到KEGG于基因的对应文件
paste list1.tmp list2.tmp | sort | uniq > ${bed}
# 删除中间过程
rm list1.tmp
rm list2.tmp
### KEGG_to_KEGG
# 检查tmp文件
if [ ! -f "./KE_to.tmp" ]
then
echo "Checking tmp files"
else
rm KE_to.tmp
fi
#
if [ ! -f "./to_KE.tmp" ]
then
echo "Checking tmp files"
else
rm to_KE.tmp
fi
# 计算KEGG_to_GENE的行数
num=`cat $bed | wc -l`
# 逐行执行
for ((i=1;i<=$num;i++))
do
# 提取行、KEGG、GENE信息
term=`cat $bed | sed -n ${i}p`
KEGG=`cat $bed | sed -n ${i}p | awk -F, 'BEGIN{FS="\t"}{print $1}'`
gene=`cat $bed | sed -n ${i}p | awk -F, 'BEGIN{FS="\t"}{print $2}'`
# 提取改行GENE在整个文件中出现的行数以及对应的KEGG通路
ln=`cat $bed | grep ${gene} | wc -l`
to_KE=`cat $bed | grep ${gene} | awk -F, '{FS="\t"}{print $1}'`
# 输出与基因出现行数等量的KEGG通路
for ((j=1;j<=${ln};j++))
do
cat $bed | sed -n ${i}p >> KE_to.tmp
done
# 输出GENE连接的通路
cat $bed | grep ${gene} | awk -F, '{FS="\t"}{print $1}' >> to_KE.tmp
done
# 合并KEGG_to_GENE与GENE_to_KEGG,得到KEGG_GENE_KEGG列表
paste KE_to.tmp to_KE.tmp > KE_to_KE.tmp.txt
rm KE_to.tmp
rm to_KE.tmp
### 筛选KEGG to KEGG 中自身比对项
# 检查tmp文件
if [ ! -f "./bed_juj.tmp" ]
then
echo "Checking tmp files"
else
rm bed_juj.tmp
fi
# 逐行运行
ln=`cat KE_to_KE.tmp.txt | wc -l`
for ((i=1;i<=$ln;i++))
do
# 同行KEGG相同的打印SAME,否则DIFF,由于KEGG中存在空格,需要空格转"_"进行对比
cat KE_to_KE.tmp.txt | sed 's/ /_/g' | sed -n ${i}p | awk -F, 'BEGIN{FS="\t";OFS="\t"}{if ($1==$3){print$1,$2,$3,"SAME"}else{print $1,$2,$3,"DIFF"}}' >> bed_juj.tmp
done
# 筛选标出“DIFF”的行,并恢复空格
cat bed_juj.tmp | awk 'BEGIN{FS="\t";OFS="\t"}$4=="DIFF"'| awk 'BEGIN{FS="\t";OFS="\t"}{print $1,$2,$3}' | sort | uniq | sed 's/_/ /g' > KEGG_GENE_KEGG.txt
cat KEGG_GENE_KEGG.txt | awk 'BEGIN{FS="\t";OFS="\t"}{print $1,$3}' > ${of}
rm KE_to_KE.tmp.txt
rm bed_juj.tmp
2024-03-02
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...