この行を試してください:
awk '$4=="B34"' file
残りのコマンド(sed、cat ...)は、上記のワンライナーにマージできます。
awk '$4=="B34"{gsub(/B/,"");print $1,$4,$5}' file
あなたの例でそれをテストしてください:
kent$ echo " B346879 length: 12 B34 L677
B111879 length: 32 B33 L677
B545879 length: 34 B34 L677
B344879 length: 98 B33 L677
B090879 length: 45 B33 L677"|awk '$4=="B34"{gsub(/B/,"");print $1,$4,$5}'
346879 34 L677
545879 34 L677
編集
awk はスペースを として取るFS
ため、3 番目のフィールドの長さは関係ありません。次に例を示します。
kent$ echo " B346879 length: 17777777777777777772 B34 L677
B111879 length: 32 B33 L677
B545879 length: 34 B34 L677
B344879 length: 98 B33 L677
B090879 length: 45 B33 L677"|awk '$4=="B34"{gsub(/B/,"");print $1,$4,$5}'
346879 34 L677
545879 34 L677
編集
わかりました、あなたが何を意味するのか見てください、これはうまくいくはずです:
awk -F'length:[ 0-9]*' '$2~/^B34/{sub(/B/,"",$1);sub(/B/,"",$2);print $1,$2}'
test を参照してください: 最初の行は特別な場合です。
kent$ echo " B346879 length:212 B34 L677
B111879 length: 32 B33 L677
B545879 length: 34 B34 L677
B344879 length: 98 B33 L677
B090879 length: 45 B33 L677"|awk -F'length:[ 0-9]*' '$2~/^B34/{sub(/B/,"",$1);sub(/B/,"",$2);print $1,$2}'
346879 34 L677
545879 34 L677