选择列并使用awk进行打印

时间:2015-03-22 04:38:26

标签: awk gawk

我重复与here中相同的例子。但问题的方面是不同的。

示例如下。

#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

我想只选择一些具有特定条件的列并打印出来。

就像我只想选择列#34; 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

如何打印出我选择的整列?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

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

$ 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