awk - pattern matching and selecting digits for printing -
i have file long line containing many columns header each column this.
bmr_22@o15-bmr_1@o23-h23 bmr_14@o22-bmr_1@o26-h26 bmr_14@o14-bmr_1@o26-h26 bmr_14@o12-bmr_1@o16-h16 bmr_17@o26-bmr_2@o24-h24 bms_88@o22-bmr_4@o22-h22 bms_89@o22-bmr_4@o26-h26 bms_89@o12-bmr_4@o12-h12 bmr_15@o25-bmr_15@o26-h26 bms_96@o25-bmr_5@o16-h16 bmr_13@o23-bmr_6@o26-h26 bmr_27@o22-bmr_126@o12-h12 bmr_17@o26-bmr_6@o13-h13 bmr_26@o26-bmr_6@o16-h16 bmr_29@o26-bmr_7@o16-h16 bms_86@o23-bmr_19@o26-h26 bms_78@o16-bmr_9@o16-h16 bms_96@o24-bmr_10@o23-h23 bmr_14@o25-bmr_11@o24-h24 bms_90@o22-bmr_11@o26-h26 bmr_25@o13-bmr_11@o12-h12 bmr_120@o24-bmr_11@o13-h13 bmr_25@o22-bmr_11@o13-h13 bms_65@o24-bmr_12@o23-h23 bmr_31@o11-bmr_12@o12-h12
i select columns based on criteria. if use command below:
awk 'nr==1{for (i=1;i<=nf;i++) if ($i~/^bmr_[1-9]@o13-bmr/) print $i } ' inputfile
i like:
bmr_1@o13-bmr_14@o13-h13 bmr_2@o13-bmr_16@o13-h13 bmr_6@o13-bmr_27@o23-h23 bmr_2@o13-bmr_16@o12-h12 bmr_1@o13-bmr_30@o26-h26 bmr_1@o13-bmr_11@o23-h23 bmr_1@o13-bmr_14@o22-h22 bmr_6@o13-bmr_27@o22-h22
if use command below:
awk 'nr==1{for (i=1;i<=nf;i++) if ($i~/^bmr_[1-9][1-9]@o13-bmr/) print $i } ' inputfile
i output below:
bmr_25@o13-bmr_11@o12-h12 bmr_26@o13-bmr_25@o12-h12 bmr_17@o13-bmr_27@o13-h13 bmr_64@o13-bmr_39@o12-h12 bmr_58@o13-bmr_44@o16-h16 bmr_36@o13-bmr_61@o12-h12 bmr_36@o13-bmr_61@o13-h13
what command if want select both, single , double digits (like bmr_2@o13-bmr_16@o12-h12 , bmr_26@o13-bmr_25@o12-h12) in 1 run ?
you can specify repetition 1 or 2 in single awk command below:
awk --posix 'nr==1{for (i=1;i<=nf;i++) if ($i~/^bmr_[1-9]{1,2}@o13-bmr/) print $i } ' inputfile
Comments
Post a Comment