# file_ID和file_name数组分别存储file ID和file name
bash
file_ID=(`awk '{if(NR>1)print $1}' ../gdc_manifest_20181023_012448.txt`)
file_name=(`awk '{if(NR>1)print $2}' ../gdc_manifest_20181023_012448.txt`)
# 数组file_path存储文件路径:
for((i=0;i<${#file_ID[@]};i++)){
file_path[$i]="./"${file_ID[$i]}"/"${file_name[$i]}
echo ${file_path[$i]}
}
# 使用awk二维数组进行合并:
awk -v file_num=${#file_path[@]} '
BEGIN{
OFS="\t";
}
{
# 每一个文件第一行是列名,而我们不需要合并列名,所以要NR>1
# 然后以miRNA($1),文件ID(ARGIND),构建值为表达量($2)二位数组a[miRNA][exp].
if(FNR>1){a[$1][ARGIND]=$3;}
}
# 构建了425个数组后进行合并:
END{
for(i in a){ # 一维是miRNA,所以i就是miRNA
printf "%s\t",i #输出miRNA
j=1; # 为了不改变文件顺序所以使用渐加的方式循环
while(j<file_num+1){ #循环输出每个样本中miRNA的表达量
printf "%s\t",a[i][j];
j=j+1;
}
print "" #每一行加个换行
}
}' ${file_path[@]} >../miRNA_exp_matrix.txt
# 将file_ID添加到表达量矩阵中:
echo miRNA ${file_ID[@]}|sed 's/ /\t/g'|awk '{if(NR==FNR)print;if(NR>FNR)print}' - ../miRNA_exp_matrix.txt >../miRNA_exp_matrix_tmp.txt
cp ../miRNA_exp_matrix_tmp.txt ../miRNA_exp_matrix.txt
#删除临时文件:
rm ../miRNA_exp_matrix_tmp.txt
自己学了一下R语言,并没有找到文件操作这些。。。