按标题名称打印某些列,标题名称上有空格(awk,sed)



我想根据标题名称从文件中提取某些列。有些名称有空格(文件以制表符分隔)。我无法删除或替换空格,因为下游应用程序将受到影响。我想要的是根据标题名称提取一些列,并按照我想要的顺序输出它们

以下是我的文件示例:

 Sample Note Intragenic Rate ABCDE_177447
 1032 NA 0.97867626 0.9300704670625763 0.72782564
 ABCDE_177447 NA 0.97836965 1.0 0.87218356 
 ABCDE_188399 NA 0.97859967 0.905527730405171 0.81188565
 ABCDE_189595 NA 0.9787659 0.9059075892313707 0.8089241
 ABCDE_189596 NA 0.9788054 0.9065243881070291 0.8092951

我想要的输出;

 Sample Intragenic ABCDE_177447
 1032 0.97867626 0.9300704670625763 0.72782564
 ABCDE_177447 0.97836965 0.87218356 
 ABCDE_188399 0.97859967 0.81188565
 ABCDE_189595 0.9787659 0.8089241
 ABCDE_189596 0.9788054 0.8092951

我已经尝试了这个解决方案AWK提取列从文件基于标题从第二个文件选择

但它不适用于名称上的空格,对于这个解决方案也是如此从文件中提取列

我也试过这个

$cat cols.awk
BEGIN {
 n=split(cols,col)
 for (i=1; i<=n; i++) s[col[i]]=i
}
NR==1 {
 for (f=1; f<=NF; f++)
   if ($f in s) c[s[$f]]=f
 next
}
{ sep=""
 for (f=1; f<=n; f++) {
   printf("%c%s",sep,$c[f])
   sep=FS
 }
 print ""
}

但当我像awk -Ft -f cols.awk.sh -v cols="Note,Sample,Intragenic Rate" metrics.txt一样运行脚本时,我得到了以下错误:

awk: illegal field $(), name "1"
 input record number 2, file metrics.txt
 source line number 12

您可以使用此awk:

awk -v cols='Sample,Intragenic,ABCDE_177447' 'BEGIN{FS=OFS="t"; nc=split(cols, a, ",")} NR==1{for (i=1; i<=NF; i++) hdr[$i]=i} {for (i=1; i<=nc; i++) if (a[i] in hdr) printf "%s%s", $hdr[a[i]], (i<nc?OFS:ORS)}' file
Sample  Intragenic  ABCDE_177447
1032    0.97867626  0.72782564
ABCDE_177447    0.97836965  0.87218356
ABCDE_188399    0.97859967  0.81188565
ABCDE_189595    0.9787659   0.8089241
ABCDE_189596    0.9788054   0.8092951

使用cols命令行参数,可以传递要打印的以逗号分隔的列列表。

以下是可读性更强的awk:

awk -v cols='Sample,Intragenic,ABCDE_177447' 'BEGIN {
   FS=OFS="t"
   nc=split(cols, a, ",")
}
NR==1 {
   for (i=1; i<=NF; i++)
      hdr[$i]=i
}
{
   for (i=1; i<=nc; i++)
      if (a[i] in hdr)
         printf "%s%s", $hdr[a[i]], (i<nc?OFS:ORS)
}' file
awk '{sub(/Note Intragenic Rate/,"Intragenic")}{sub(/NA/, "")}NR>2{sub($3, "")}1' file
Sample Intragenic ABCDE_177447
1032  0.97867626 0.9300704670625763 0.72782564
ABCDE_177447  0.97836965  0.87218356 
ABCDE_188399  0.97859967  0.81188565
ABCDE_189595  0.9787659  0.8089241
ABCDE_189596  0.9788054  0.8092951

最新更新