我重复与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
如何打印出我选择的整列?
非常感谢提前。
答案 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