次の文字列を含むファイルがあります。
F1B308F2B3094F3B310F4B317CF5B312F6BC313DF7B315
文字列はトークン(この場合は「F」と数字)で区切られます。この場合、ラベルはF1
、、、、、およびです。F2
F3
F4
F5
F6
F7
F2
次の5文字と次の6文字をF6
スペースで区切って印刷したいと思います。
B3094 BC313D
1行ではなく2行に印刷されますが、ここに私の試みがあります。 2つの値を1行に入れる方法。
$ echo F1B308F2B3094F3B310F4B317CF5B312F6BC313DF7B315 | \
awk '{match($0,/F2/); print substr($0, RSTART +2, RLENGTH +3);} \
{match($0,/F6/); print substr($0, RSTART +2,RLENGTH +4);}'
ベストアンサー1
実行可能なソリューションに非常に近い。以下は1つのアプローチです(読みやすくするためにフォーマットされています)。
awk '{
match($0,/F2/);
a=substr($0, RSTART +2, RLENGTH +3);
match($0,/F6/);
b=substr($0, RSTART +2,RLENGTH +4);
print a" "b
}'
substr()
この例では、直接印刷するのではなく、両方の関数を変数に割り当て、最後に同時に印刷するように設定します。単一の印刷呼び出しで印刷すると、awk
行の各部分の後ではなく行の末尾に改行のみが追加されるため、結果は2行に分割されます。
bash:~$ echo F1B308F2B3094F3B310F4B317CF5B312F6BC313DF7B315 | awk '{match($0,/F2/); a=substr($0, RSTART +2, RLENGTH +3); match($0,/F6/); b=substr($0, RSTART +2,RLENGTH +4); print a" "b}'
B3094 BC313D