Linux下按列数删除行:如何移除.fam文件中列数不足6的行
fam文件过滤列数不足6行的解决方案
方法1:awk命令(推荐,大文件秒处理)
Linux、Unix、macOS系统直接在终端执行以下命令即可:awk 'NF>=6' file.fam > filtered_file.fam
- 命令说明:awk内置变量
NF代表当前行按空白符分割的字段数,该命令仅保留字段数≥6的行,处理结果输出到新文件filtered_file.fam,不会修改原文件,安全性高。 - 结果验证:执行
wc -l file.fam filtered_file.fam即可对比原文件和处理后文件的行数,确认异常行已删除。
方法2:Python代码实现(适合需要集成到自有脚本的场景)
逐行读取处理,内存占用极低,适合任意大小的文件:
with open("file.fam", "r", encoding="utf-8") as f_in, open("filtered_file.fam", "w", encoding="utf-8") as f_out: for line in f_in: # 按空白符分割行,跳过首尾空白后统计字段数 if len(line.strip().split()) >= 6: f_out.write(line)
以上两种方法都完全适配PLINK fam文件的空白分隔格式,不会误判行尾空格为额外字段,示例中仅含5个字段的
6 6 0 0 1行会被正确过滤,其余正常行全部保留。
内容的提问来源于stack exchange,提问作者Aryh
相关产品推荐
相关产品推荐

