如何用Awk提取Linux中以PC开头的多列患者数据?
提取指定列的正确Awk实现方法
针对你的需求——保留ID_REF列,同时提取所有格式为PC****(PC后接4位病例号)的列,以下是正确的Awk命令实现:
命令示例(假设数据为制表符分隔)
BEGIN { FS="\t"; OFS="\t" } NR==1 { # 遍历表头,记录需要保留的列索引 for (i=1; i<=NF; i++) { if ($i == "ID_REF" || $i ~ /^PC[0-9]{4}$/) { keep[i] = 1 cols[++n] = i } } } # 输出所有行的目标列 { for (i=1; i<=n; i++) { printf "%s%s", $(cols[i]), (i<n ? OFS : "\n") } }
关键说明
- 分隔符设置:
BEGIN块中指定FS(输入分隔符)和OFS(输出分隔符)为制表符,如果你的数据是逗号分隔,只需改为FS=","; OFS=","。 - 表头处理:第一行(
NR==1)遍历所有列名,匹配ID_REF或PC开头且后接4位数字的列,将这些列的索引存入数组cols,保证输出列顺序与原表一致。 - 数据行输出:后续每一行按照
cols数组中记录的索引,依次输出对应列,确保只保留目标列。
执行方式
将上述命令保存为extract_cols.awk,然后运行:
awk -f extract_cols.awk your_data_file.txt > output.txt
内容的提问来源于stack exchange,提问作者Ryan Fuller
相关产品推荐
相关产品推荐

