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
我正在重复
例子如下
#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