Select 列并使用 awk 打印

Select column and print using awk

我正在重复 中的相同示例。但是问题的方面是不同的。

例子如下

#Frame  BMR_42@O22  BMR_49@O13  BMR_59@O13  BMR_23@O26  BMR_10@O13  BMR_61@O26  BMR_23@O25 
 1      1           1           0           1           1           1           1
 2      0           1           0           0           1           1           0
 3      1           1           1           0           0           1           1
 4      1           1           0           0           1           0           1
 5      0           0           0           0           0           0           0
 6      1           0           1           1           0           1           0
 7      1           1           1           1           0           0           0
 8      1           1           1           0           0           0           0
 9      1           1           1           1           1           1           1
10      0           0           0           0           0           0           0

我想 select 只有几列符合特定条件并打印出来。

就像我只想 select 列“BMR_*@O26”并打印整个列。 (注意:* 代表任何数字)

所以我尝试使用这个命令

awk '{for (i=2;i<=NF;i++) if ($i~/^BMR_[0-9]+@O26/) print }' inputFile

不幸的是,我没有得到我想要的输出。我要打印的两列如下:

BMR_23@O26  BMR_61@O26 
1           1
0           1
0           1
0           0
0           0
1           1
1           0
0           0
1           1
0           0

我如何打印出我 select 编辑的整列?

非常感谢。

您需要仅在 header 行测试正则表达式以获取字段编号,然后为每一行打印这些字段编号:

$ awk '
NR==1 { for (i=1;i<=NF;i++) if ($i ~ /BMR_.*@O26/) fld[++n] = i }
{ for (i=1;i<=n;i++) printf "%*s", (i<n?-12:1), $(fld[i]); print "" }
' file
BMR_23@O26  BMR_61@O26
1           1
0           1
0           1
0           0
0           0
1           1
1           0
0           0
1           1
0           0