我有一个文本:SG_gen.txt文件,其中包含多列,如下所示:
snp_CHR POS HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103
snp_3 47609552 0 1 1 1 1 0 1
snp_3 47614413 0 1 1 1 1 0 1
snp_3 47616151 0 1 1 1 1 0 1
snp_3 47616155 0 1 1 1 1 0 1
snp_3 47617504 0 1 1 1 1 0 1
snp_3 47617679 0 1 1 1 1 0 1
...
我想通过“ _”加入前两列:snp_CHR和POS,并将其重命名为ID,以便该列看起来像这样:
ID
snp_3_47609552
snp_3_47614413
snp_3_47616151
...
这个新的ID列将是第一列,我将保留所有其他列HG00096,HG00097 ...我将不保留原始的snp_CHR和POS。我该怎么办?
我尝试使用:
awk '{print $0, $1 "_" $NF}' SG_gen.txt > SG_gen1.txt
但这并没有给我我想要的结果。
答案 0 :(得分:0)
这应该做:
double t; /* Input from user */
int check;
check = 0;
/* This loop is use to validate the user input. *
* For example: If the user insert a character value "x". *
* i am trying to ask the user to insert a valid numeric value. */
while (check == 0)
{
printf("Insert the value: ");
if (scanf(" %lf", &t) == 1) {
check = 1; /* Everythink okay. No loop needed */
}
else
{
printf("Failed to read double. ");
check = 0; /* loop aganin to read the value */
fflush( stdout );
}
}
return 0;
会有多余的空白,以后可以根据需要将其标准化。
答案 1 :(得分:0)
如果认为您的Input_file与所示示例相同,请尝试执行以下操作。
awk 'match($0,/snp_[0-9]+ [0-9]+/){value=substr($0,RSTART,RLENGTH);sub(" ","_",value);print value}' Input_file
答案 2 :(得分:0)
如果您想尝试Perl。请注意,这将保留示例输入中其他列之间的空间。
$ cat anika.txt
snp_CHR POS HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103
snp_3 47609552 0 1 1 1 1 0 1
snp_3 47614413 0 1 1 1 1 0 1
snp_3 47616151 0 1 1 1 1 0 1
snp_3 47616155 0 1 1 1 1 0 1
snp_3 47617504 0 1 1 1 1 0 1
snp_3 47617679 0 1 1 1 1 0 1
$ perl -pe 's/^\s*//g; s/\s/_/; s/^\S+\s+\S+/ID/ if $.==1' anika.txt
ID HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103
snp_3_47609552 0 1 1 1 1 0 1
snp_3_47614413 0 1 1 1 1 0 1
snp_3_47616151 0 1 1 1 1 0 1
snp_3_47616155 0 1 1 1 1 0 1
snp_3_47617504 0 1 1 1 1 0 1
snp_3_47617679 0 1 1 1 1 0 1
$