【发布时间】:2016-04-09 05:59:30
【问题描述】:
我想根据标题名称从文件中提取某些列。一些名称有空格(文件是制表符分隔的)。我无法删除或替换这些空间,因为下游应用程序会受到影响。我正在寻找的是根据标题名称提取一些列并按我想要的顺序输出它们
这是我的文件示例:
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 extract columns from file based on header selected from 2nd file
但它不适用于名称上的空格,对于此解决方案 Extracting columns from a file 也是如此
我也试过了
$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 -F\t -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
【问题讨论】: