使用AWK拆分带表头的制表符文件并为每个子文件保留表头
按列拆分TSV文件并保留表头的解决方案
这问题我处理TSV数据时也碰到过,只需要给你的awk命令加一点表头处理逻辑就行,直接用下面的命令:
awk -F'\t' 'NR==1{header=$0; next} !seen[$1]++{print header > $1} {print > $1}' file.tab
我给你拆解下每个部分的作用,方便理解和调整:
-F'\t':明确指定字段分隔符为制表符,完美适配你的TSV文件格式NR==1{header=$0; next}:处理到文件第一行(表头行)时,把整行内容存到header变量里,再用next跳过后续逻辑,避免把表头当成普通数据行处理!seen[$1]++{print header > $1}:用seen数组记录第一列的每个值是否已处理过。第一次遇到某个第一列值时,!seen[$1]为真,就把保存的表头写入对应文件;之后再遇到相同值时,这个判断为假,不会重复写入表头{print > $1}:把当前数据行写入以第一列值命名的文件中
这个命令会自动为第一列的每个唯一值生成对应文件,每个文件都包含原文件的表头,后面跟着属于该样本的所有数据行。如果你的第一列值包含空格、特殊符号这类可能影响文件名的字符,可能需要额外处理,但常规样本名称都能直接用这个命令搞定。
内容的提问来源于stack exchange,提问作者Blaze9
相关产品推荐
相关产品推荐

