如何用awk打印制表符文件的第1列及所有raw_counts列?
解决方法
你的原有脚本从第3列开始输出所有字段,完全没有做筛选,所以输出和输入一致,无法满足提取第1列+所有raw_counts列的需求。以下是修正后的awk脚本:
BEGIN {FS = "\t"; OFS = "\t"} NR == 1 { # 缓存第一行的样本表头 for (i=1; i<=NF; i++) h1[i] = $i next } NR == 2 { # 收集所有raw_counts列的索引,同时输出第一行的筛选后表头 printf "%s", h1[1] for (i=1; i<=NF; i++) { if ($i == "raw_counts") { cols[++n] = i printf "%s%s", OFS, h1[i] } } printf "\n" # 输出第二行的字段名:gene + raw_counts printf "%s", $1 for (j=1; j<=n; j++) { printf "%s%s", OFS, $(cols[j]) } printf "\n" next } # 处理后续数据行 { printf "%s", $1 for (j=1; j<=n; j++) { printf "%s%s", OFS, $(cols[j]) } printf "\n" }
脚本说明
- 第一行处理:缓存样本名称行的所有字段,后续用于生成筛选后的表头
- 第二行处理:遍历字段名,记录所有值为
raw_counts的列索引,同时输出筛选后的表头(第一列+对应样本名)和字段名行(gene+raw_counts) - 数据行处理:输出第一列,再依次输出所有
raw_counts列的值
使用命令
将脚本保存为prog.awk,执行:
awk -f prog.awk input.txt > output.csv
执行后输出结果与你的需求一致(注:你给出的期望输出第二行末尾的RPKM应为笔误,脚本会严格输出所有raw_counts列)
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

