You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用awk根据表头条件筛选含指定字符串的列并输出全量行内容

问题原因

你原来的命令逻辑是逐行判断每一列的内容是否包含D2字符串,只有第一行表头的对应列满足匹配条件,后续数据行的列都是数值,不存在D2,因此只会输出表头的匹配内容。

正确实现命令

awk 'NR==1{for(i=1;i<=NF;i++) if($i ~ /D2/) cols[++n]=i} {for(j=1;j<=n;j++) printf "%-10s", $cols[j]; print ""}' myfile

命令逻辑说明

  • 第一行(行号NR==1)遍历所有列,把列名匹配D2的列索引存入数组cols,用变量n记录符合条件的列总数
  • 对所有行(包括表头和后续数据行),遍历cols数组输出对应列的内容,%-10s用于控制列宽对齐,匹配你预期的输出格式,每一行输出完成后打印换行符避免内容挤在同一行。

输出结果

D20120122 D20130404
4         5        

内容的提问来源于stack exchange,提问作者Marco Polcari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:18:03