如何用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
相关产品推荐
相关产品推荐

